gpt4 book ai didi

java - 在基本 Activity 中进行更改以反射(reflect)所有派生 Activity 中的更改?

转载 作者:太空宇宙 更新时间:2023-11-04 14:08:55 25 4
gpt4 key购买 nike

我有一个

public abstract class BaseActivity extends Activity {

protected void setCustomHeader(String title,String subText){
}
}

两个其他类扩展BaseActivity类。

public class ListActivity extends BaseActivity {
setCustomHeader("List","Child1");
}

&

public class DetailsActivity extends BaseActivity {
setCustomHeader("Details","Child2");
}

BaseActivity 通常会减少在所有子 Activity 中创建自定义操作栏的代码,效果很好。

我希望更改某些事件(例如 BroadcastReciever)的 BaseActivity 中的自定义 header ,以便所有其他 ChildActivity(此处为 ListActivity n DetailsActivity)扩展 BaseActivity 也得到更新。

是否可以仅更改BaseActivity而不更改ChildActivity,我强制所有childrenActivity根据从广播接收器收到的事件更新其自定义 header

编辑:我不想为每个 Activity 编写一个接收器,所以我正在尝试这种方法,请建议是否有更好的方法。

最佳答案

您可能可以通过多种方式实现此目的,但所有这些都需要检查 BaseActivity 的 onResume() 以便在实际显示主题时适本地重置主题...

首先(我可能会因为建议这一点而受到批评),最快的方法是使用包含您想要完成的任何内容的适当值的静态变量

private static WhateverData o;

您所要做的就是调用:

public static void set(WhateverData o){
BaseActivity.o = o;
}

在您的 Activity 的 onResume() 方法中,您可以根据当前设置的静态对象重新创建您想要的任何 Views

为什么这种方法不是最好的?有几个原因。使用非最终静态变量会带来更大的 NPE 风险(您肯定需要处理值为空的默认情况),并且数据在需要时可能并不总是可用(由于操作系统杀死它等)。

现在,更好的方法可能是以与使用静态变量相同的方式使用 SharedPreferences。这将确保数据持续存在并且始终可用(但是,您仍然应该处理默认的 null 情况)。

public static WhateverData getWhateverData(Context context){
return context.getSharedPreferences(BaseActivity.class.getName(), 0).getWhateverData("data_key", default);
}

public static void setWhateverData(Context context, WhateverData o){
context.getSharedPreferences(BaseActivity.class.getName(), 0).edit().putWhateverData("data_key", o).commit();
}

然后,为了实际使用它,您只需在 BaseActivity 中重写一次 onResume() 即可:

@Override
protected void onResume(){
super.onResume();
WhateverData data = BaseActivity.getWhateverData(this);
// Now do something cool with that data
}

显然,您必须实现这些方法来处理WhateverData 的任何类型的数据,但我只是想为您指出正确的方向...

关于java - 在基本 Activity 中进行更改以反射(reflect)所有派生 Activity 中的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com