我试图找出 TabActivity 和嵌入在此 TabActivity 中的子 Activity 之间通信的最佳实践。
在我的 TabActivity 中,有一个按钮。单击按钮时,我希望更新嵌入在此 TabActivity 中的子 Activity 。我写了如下代码,只是想知道这是否是一个好习惯。谢谢。
MyTabActivity.java
public class MyTabActivity extends TabActivity implements OnClickListener {
private TabHost m_tabHost;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ff_tab_activity);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
m_tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, ChildActivity.class);
spec = m_tabHost.newTabSpec("Tab 1");
spec.setContent(intent);
tabView = (TextView) inflater.inflate(R.layout.tab_indicator, null);
spec.setIndicator(tabView);
m_tabHost.addTab(spec);
m_tabHost.setCurrentTab(0);
ImageView nextButtonIv = (ImageView) findViewById(R.id.next_button);
nextButtonIv.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.next_button:
synchronized (ChildActivity.class) {
if (null != ChildActivity.s_childActivity) {
ChildActivity.s_childActivity.changeUI();
}
}
break;
}
}
child Activity .java
public class ChildActivity extends Activity {
public static ChildActivity s_childActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
synchronized (MatchupsActivity.class) {
s_childActivity = this;
}
setContentView(R.layout.child_activity);
}
public void changeUi() {
code that changes UI
}
protected void onDestroy() {
super.onDestroy();
synchronized (MatchupsActivity.class) {
s_childActivity = null;
}
}
最佳答案
看起来不错。一些注意事项:
- 我看不出同步的理由。
- 我会替换
ChildActivity.s_childActivity.changeUI();
和
if(ChildActivity.s_childActivity != null){
ChildActivity.s_childActivity.changeUI();
}
甚至
try{
ChildActivity.s_childActivity.changeUI();
} catch(Exception e){
//log
}
增加偏执的安全性。 :)
关于android - TabActivity 和嵌入的 Activity 之间的通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3134783/