从另一个活动获取一个活动的根视图

时间:2015-02-27 19:39:11

标签: android

有没有办法从另一个活动获得一个活动的根视图让我们说有两个活动A和B我希望从B.please帮助的活动A的根视图

编辑:我正在尝试从主题活动中进行主要活动的更改,因为我希望在从首选项活动中选择一个复选框首选项时立即更改主要活动中的TextView文本。

4 个答案:

答案 0 :(得分:1)

已停止或隐藏的活动可能不再存在,以释放资源。引用其他活动中的对象不是一个好主意。

要将事件/数据从一个活动发送到您可能使用的另一个活动:

  1. 使用startActivityForResult()开始更新的活动。并通过onActivityResult()返回结果。

  2. 共享某些数据是第三个对象,可供所有活动使用。很可能是单身人士或应用程序类。

  3. 使用EventBus并发布sticky个事件。新订阅者将自动获得这些活动。此方法适用于所有类型的对象,而不仅仅是活动。

答案 1 :(得分:0)

我不确定你需要什么,这听起来有点危险,但根视图可能在没有先运行的情况下不会存在,但你可能能够在运行根视图并将其传递给活动B时获取根视图,但视图在未运行时不应处于活动状态,因此将为空。

答案 2 :(得分:0)

将其创建为静态并在OnCreate上将rootView传递给它,或将其传递给Application类,以便它在整个应用程序之间保持不变。在执行操作之前验证它是否为null。

我从未尝试过,但我的猜测是,当活动未完成时,可以接受rootView(当其他活动处于活动状态时,其状态保持暂停状态。)

答案 3 :(得分:0)

看起来您正试图在您的偏好改变时触发各种活动。我建议您使用LocalBroadcastManager将邮件从ActivityB发送到ActivityA。我假设您的ActivityB是首选项和活动活动,ActivityA位于后台堆栈中:

<强> 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);

鉴于您的ActivityA尚未销毁,它将能够捕捉到广播并且您可以实现您想要的效果。