我试图找出TabActivity与此TabActivity中嵌入的子活动之间的最佳通信实践.
在我的TabActivity中,有一个按钮.单击该按钮时,我希望更新此TabActivity中嵌入的子活动.我编写了如下代码,只是想知道它是否是一个好习惯.谢谢.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
ChildActivity.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;
}
}
Run Code Online (Sandbox Code Playgroud)
由于TabActivity是一个ActivityGroup,我将使用以下之一:
返回正在显示的子选项卡活动.在您的情况下,此方法将返回正在使用的ChildActivity的实例.
ChildActivity childActivity = (ChildActivity) getCurrentActivity();
Run Code Online (Sandbox Code Playgroud)
给出其ID /选项卡规范名称,无论显示什么活动,返回子选项卡活动.
ChildActivity childActivity = (ChildActivity) getLocalActivityManager().getActivity("Tab 1");
Run Code Online (Sandbox Code Playgroud)
我建议在你的ChildActivity中覆盖onNewIntent(Intent):
Intent intent = new Intent();
intent.putExtra("xyz", "whatever"); // or a serializable
ChildActivity childActivity = (ChildActivity) getLocalActivityManager().getActivity("Tab 1");
childActivity.onNewIntent(intent);
Run Code Online (Sandbox Code Playgroud)
如果有效,请告诉我!
| 归档时间: |
|
| 查看次数: |
7019 次 |
| 最近记录: |