2012-06-20 82 views
3

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

}

任何想法?

回答

0

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

  1. 创建静态布尔变量CAN_LOAD =虚假和HAS_LOADED =假在HoursActivity类。
  2. 一旦在NotesActivity中发生任何需要加载HourActivity类的需求,请将CAN_LOAD设置为true。
  3. 在HoursActivity,您的onCreate和调用的onResume要运行的加载功能,并且该功能测试CAN_LOAD ==真内& & HAS_LOADED == false,并和负载只有当两个通,设置HAS_LOADED = true在该函数使它不会多次运行。

所以当你点击标签时,onResume会被调用,Activity可以做任何需要的设置。如果加载函数执行速度缓慢,那么性能可能会有问题,在这种情况下,您需要稍微修改它,以免等待onResume加载(保持异步)。但那至少应该让你开始。