3

我正在尝试使用 Tabhost,我有 2 个选项卡,每个选项卡加载一个 Activity,每个 Activity 都有一个 aSync 方法来解析一些数据。如果我setCurrentTab(0)在创建 Tabmenu Activity 时这样做一切正常,但如果我尝试在第二个选项卡上启动应用程序(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);   
}

}

有任何想法吗?

4

1 回答 1

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 以便它不会多次运行。

因此,当您单击选项卡时,将调用 onResume 并且 Activity 可以进行所需的任何设置。如果加载函数执行速度很慢,可能会出现性能问题,在这种情况下,您需要稍微修改它,以免等到 onResume 加载(保持异步)。但这至少应该让你开始。

于 2012-08-04T22:07:18.573 回答