【问题标题】:First tab always called第一个标签总是被调用
【发布时间】:2012-06-20 01:12:25
【问题描述】:

我正在尝试使用 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);   
}

}

有什么想法吗?

【问题讨论】:

    标签: java android android-tabhost


    【解决方案1】:

    过去我不得不做类似的事情并通过执行以下操作来解决它:

    1. 在您的 HoursActivity 类中创建一个静态布尔变量 CAN_LOAD = false 和 HAS_LOADED = false。
    2. 一旦在 NotesActivity 中发生任何需要加载 HoursActivity 类的事情,请将 CAN_LOAD 设置为 true。
    3. 在 HoursActivity 中,在 onCreate 和 onResume 上调用您要运行的加载函数,并在该函数中测试 CAN_LOAD == true && HAS_LOADED == false 并且仅在两者都通过时才加载,在函数,使其不会多次运行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 2017-09-14
      • 2012-02-19
      • 2020-08-07
      相关资源
      最近更新 更多