HVenom
HVenom

Reputation: 762

Get root view of one activity from another activity

Is there a way to get a root view of one activity from another lets say there are two activity A and B i want root view of activity A from B.please Help

Edit: I am Trying to make change in Main Activity from Preference Activity for ex i want to change the text of TextView in Main Activity as soon as i select a checkboxpreference from preference activity.

Upvotes: 0

Views: 996

Answers (4)

s.d
s.d

Reputation: 29436

A stopped, or hidden activity may no longer be present, to free up resources. It is not a good idea to reference objects from other Activities.

To send an event/data from one Activity to another Activity you may use:

  1. Start newer activity using startActivityForResult(). And get results back via onActivityResult().

  2. Share some data is a third object, accessible to all activities. Most likely a singleton or Application class.

  3. Use EventBus and post sticky events. New subscribers will automatically get these events. This method works for all kinds of objects, not just activities.

Upvotes: 1

hidro
hidro

Reputation: 12541

Look like you are trying to trigger an action across activities when your preference changed. I suggest to use LocalBroadcastManager to send the message from ActivityB to ActivityA. I assume that your ActivityB is the preference and active activity, and ActivityA is in the back stack:

ActivityB.java

mListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // create your broadcast intent and pass the value of changed preference
        Intent intent = ...
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    }
};
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(mListener);

ActivityA.java

mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // handle your change to ActivityA here
    }
};
// create intent filter for your preference change broadcast
IntentFilter intentFilter = ...
LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, intentFilter);

Given that your ActivityA is not yet destroyed, it will be able to catch the broadcast and you can achieve what you want.

Upvotes: 0

Renato Probst
Renato Probst

Reputation: 6054

Create it as static and pass the rootView to it on OnCreate, or pass it to the Application class so it persist between entire application. Verify if its null before doing operations.

I never tryed it, but my guess is that while activity is not finished the rootView can be accesed (its status stays on pause while another activity is active).

Upvotes: 0

Shawn Hazen
Shawn Hazen

Reputation: 162

I'm not sure what you would need this for, it sounds a little dangerous, but the root view probably won't exist without running first, but you MAY be able to get the root view while it's running and pass it to Activity B, but the view shouldn't be active while it's not running, thus will be null.

Upvotes: 0

Related Questions