TabActivity和嵌入式活性之间的通信 [英] Communication between TabActivity and the embedded activity

查看:124
本文介绍了TabActivity和嵌入式活性之间的通信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图找出最佳的通信实践TabActivity并嵌入该TabActivity子活动之间。

在我的TabActivity,有一个按钮。当单击该按钮时,我想镶嵌在这TabActivity子活动进行更新。我写的code像下面了,只是不知道它是否是一个很好的做法。谢谢你。

MyTabActivity.java

 公共类MyTabActivity扩展TabActivity实现OnClickListener {
    私人TabHost m_tabHost;

  公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.ff_tab_activity);

    LayoutInflater充气=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    m_tabHost = getTabHost();
    TabHost.TabSpec规范;
    意向意图;

    意图=新的意图()setClass(这一点,ChildActivity.class)。
    规格= m_tabHost.newTabSpec(标签1);
    spec.setContent(意向);
    TabView的=(的TextView)inflater.inflate(R.layout.tab_indicator,NULL);
    spec.setIndicator(TabView的);
    m_tabHost.addTab(规范);

    m_tabHost.setCurrentTab(0);
    ImageView的nextButtonIv =(ImageView的)findViewById(R.id.next_button);
    nextButtonIv.setOnClickListener(本);
  }

  @覆盖
  公共无效的onClick(视图v){
    开关(v.getId()){
    案例R.id.next_button:
        同步(ChildActivity.class){
            如果(NULL!= ChildActivity.s_childActivity){
                ChildActivity.s_childActivity.changeUI();
            }
        }
        打破;
    }
}
 

ChildActivity.java

 公共类ChildActivity延伸活动{
    公共静态ChildActivity s_childActivity;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        同步(MatchupsActivity.class){
            s_childActivity =这一点;
        }
        的setContentView(R.layout.child_activity);
    }

    公共无效changeUi(){
        code,改变UI
    }

    保护无效的onDestroy(){
        super.onDestroy();

        同步(MatchupsActivity.class){
            s_childActivity = NULL;
        }
}
 

解决方案

似乎罚款。有两点要注意:
- 我看不出有任何理由进行同步
。 - 我会更换

  ChildActivity.s_childActivity.changeUI();
 

 如果(ChildActivity.s_childActivity!= NULL){
    ChildActivity.s_childActivity.changeUI();
}
 

甚至

 尝试{
    ChildActivity.s_childActivity.changeUI();
}赶上(例外五){
    //日志
}
 

为增加偏执的安全。 :)

I am trying to figure out the best practice of communication between a TabActivity and the child activity embedded in this TabActivity.

In my TabActivity, there is a button. When the button is clicked, I want the child activity embedded in this TabActivity to be updated. I wrote the code like below, and just wonder whether it is a good practice. Thanks.

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;
    }
}

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;
        }
}

解决方案

Seems fine. A couple of notes:
- I see no reason for synchronization.
- I'd replace

ChildActivity.s_childActivity.changeUI();

with

if(ChildActivity.s_childActivity != null){
    ChildActivity.s_childActivity.changeUI();
}

or even

try{
    ChildActivity.s_childActivity.changeUI();
} catch(Exception e){
    //log
}

for added paranoid safety. :)

这篇关于TabActivity和嵌入式活性之间的通信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆