TabActivity与嵌入式活动之间的通信

use*_*239 3 android

我试图找出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)

pgr*_*ean 7

由于TabActivity是一个ActivityGroup,我将使用以下之一:

  • getCurrentActivity()

返回正在显示的子选项卡活动.在您的情况下,此方法将返回正在使用的ChildActivity的实例.

ChildActivity childActivity = (ChildActivity) getCurrentActivity();
Run Code Online (Sandbox Code Playgroud)
  • getLocalActivityManager().getActivity(字符串)

给出其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)

如果有效,请告诉我!