始终调用第一个标签

时间:2012-06-20 01:12:25

标签: java android android-tabhost

我正在尝试使用Tabhost,我有2个标签,每个标签加载一个Activity,每个Activity都有一个aSync方法来解析一些数据。如果我在创建Tabmenu Activity时setCurrentTab(0)一切正常,但是如果我尝试在第二个选项卡(setCurrentTab(1))上启动应用程序,它会尝试加载第一个选项卡,并执行aSync方法第一个选项卡崩溃,因为某些数据缺乏工作方法,根本不应该调用。

这是TabMenu.Activity:

public class TabMenu extends TabActivity {

TabHost tabHost = null;


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    setResult(resultCode);
    this.finish();
}

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu);
    Intent intentToGet = getIntent();
    tabHost = getTabHost(); 
    TabHost.TabSpec spec; 
    Intent intent; 
    TabHost.TabSpec spec2; 
    Intent intent2; 

    intent = new Intent().setClass(this, HoursActivity.class);
    intent.putExtra("student", intentToGet.getStringExtra("student"));
    intent.putExtra("pass", intentToGet.getStringExtra("pass"));
    intent.putExtra("un", intentToGet.getStringExtra("un"));

    spec = tabHost
            .newTabSpec("hours")
            .setIndicator("Hours")
            .setContent(intent);
    tabHost.addTab(spec);

            intent2 = new Intent().setClass(this, NotesActivity.class);
    intent2.putExtra("student", intentToGet.getStringExtra("student"));
    intent2.putExtra("pass", intentToGet.getStringExtra("pass"));
    intent2.putExtra("un", intentToGet.getStringExtra("un"));
    spec2 = tabHost
            .newTabSpec("notes")
            .setIndicator("Notes")
            .setContent(intent2);
    tabHost.addTab(spec2);

    tabHost.setCurrentTab(1);   
}

}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在过去,我必须做类似的事情并通过以下方式解决它:

  1. 在HoursActivity类中创建一个静态布尔变量CAN_LOAD = false和HAS_LOADED = false。
  2. 如果需要在NotesActivity中发生任何需要加载HoursActivity类的内容,请将CAN_LOAD设置为true。
  3. 在HoursActivity中,在onCreate和onResume上调用您想要运行的加载函数,并在该函数测试中为CAN_LOAD == true&& HAS_LOADED == false并且仅在两者都通过时加载,在函数中设置HAS_LOADED = true,以便它不会多次运行。
  4. 因此,当您单击选项卡时,将调用onResume,并且Activity可以执行所需的任何设置。如果加载功能执行缓慢,可能会出现性能问题,在这种情况下,您需要稍微修改它,直到onResume加载(保持异步)为止。但这应该至少让你开始。