Coldfish
Coldfish

Reputation: 378

How to set a TextView from another class (not extending to Activity.class)

I have a problem about setting a TextView from a class which is not a child class of Activity. This class is basically used for handling registration and REST request with 3rd party server.

After getting textfield info from 3rd Party server, it is too late to set TextView in the Main Activity.

How can I pass this info and set the TextView in the MainActivity? Is there any way to do this?

Upvotes: 0

Views: 1848

Answers (3)

MLQ
MLQ

Reputation: 13511

Try to pass the Activity to the non-Activity class when you instantiate it. For example:

public class NonActivityClass {
    private Activity parentActivity;
    public NonActivity(Activity parentActivity) {
        this.parentActivity = parentActivity;
    }
}

Or you can just pass the Activity to a static method in your NonActivityClass if you don't want to instantiate it (it's abstract). Then, you can inflate the TextView or do a findViewById from the parent and set the text.

From my experience, you should never use a static non-final variable to maintain a reference across activities. When you restart the app or the phone, or when Android kills your app's process, the reference and state of the variable becomes lost and may cause your app to crash.

Upvotes: 0

Eldhose M Babu
Eldhose M Babu

Reputation: 14530

The proper way of doing this this is to create a listener.

Create an interface :

public interface OperationCompletedListener{
void onOperationCompleted(String resultValue);
}

Then in your class which calls Rest services, create a variable for this listener and a method to set it.

private OperationCompletedListener mListener;

public void setOperationCompletedListener(OperationCompletedListener listener){
mListener=listener;
}

Then when the your rest service completed call like below :

if(mListener!=null){
mListener.onOperationCompleted("your value to be passed");
}

Then in your activity class which contains the TextView, create an object of OperationCompletedListener and set it to the other class using the set method that we created earlier. Then in the onOperationCompleted method, set the text view with your value and you are done.

private OperationCompletedListener mOperationCompletedListener=new OperationCompletedListener() {

    @Override
    public void onOperationCompleted(String resultValue) {
        yourTextView.setText(resultValue);
    }
};

restServiceClassObject.setOperationCompletedListener(mOperationCompletedListener);

Upvotes: 2

Talha
Talha

Reputation: 12717

You can create an static method which update textview in your activity class . Then call this method from your other class whenever you want.

Upvotes: 0

Related Questions