2011-10-08 87 views
1

我已经创建了一个选项卡活动,显示了在xml字符串数组中定义的多个选项卡。每个选项卡都具有与使用不同数据更新的内容相同的列表视图。 每次单击某个选项卡时,我都可以看到我的选项卡和内容,但第一个选项卡(创建活动时)从不显示。为什么我的第一个标签不显示?

我可以在我的日志中看到onCreate执行时调用onTabChanged,但结果不显示。如果我更改选定的选项卡并返回到第一个,我可以看到它。

这是我的代码:

public class MyActivity extends TabActivity { 
    protected final void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     LOGGER.debug("onCreate.start"); 

     setContentView(R.layout.mylayout); 

     listview = (ListView) findViewById(R.id.listview); 
     adapter = new MyAdapter(getApplicationContext(), new ArrayList<Station>()); 
     listview.setAdapter(adapter); 

     final Resources res = getResources(); 
     final TabHost tabHost = getTabHost(); 

     tabHost.setOnTabChangedListener(new OnTabChangeListener(
      (MyApplication) getApplicationContext())); 

     TabHost.TabSpec spec; 

     final String[] tabsString = res.getStringArray(R.array.tabs); 
     for (int i = 0; i < tabsString.length; i++) { 
      final String[] tab = tabsString[i].split("\\|"); 
      spec = tabHost.newTabSpec(tab[0]).setIndicator(tab[1]); 
      spec.setContent(R.id.tabcontent); 

      tabHost.addTab(spec); 

      tabHost.getTabWidget().getChildAt(i).getLayoutParams().width = TAB_WIDTH; 
     } 

     LOGGER.debug("onCreate.end"); 
    } 


    public void onTabChanged(final String tabId) { 

     LOGGER.debug("onTabChanged.start"); 

     refreshTask = new AsyncTask<Void, Void, List<Station>>() { 

      @Override 
      protected void onPreExecute() { 

       /* Show progress bar and hide list view. */ 
       findViewById(R.id.loading).setVisibility(View.VISIBLE); 
       findViewById(R.id.listview).setVisibility(View.GONE); 
      }; 

      @Override 
      protected List<Station> doInBackground(final Void... params) { 

       return getStations(0, 0, tabId); 
      } 

      @Override 
      protected void onPostExecute(final List<Station> result) { 

       if (result != null) { 
        adapter.setStations(result); 
       } else { 
        adapter.clear(); 
       } 
       adapter.notifyDataSetChanged(); 

       /* Hide progress bar and show list view. */ 
       findViewById(R.id.loading).setVisibility(View.GONE); 
       findViewById(R.id.listview).setVisibility(View.VISIBLE); 
      } 
     }; 

     refreshTask.execute(); 

     LOGGER.debug("onTabChanged.end"); 
    } 
} 

这是日志我可以在logcat的控制台中看到:

MyActivity  onCreate.start 
MyActivity  onTabChanged.start 
MyActivity  onTabChanged.end 
MyActivity  onCreate.end 

你有一个想法? 感谢

回答

0

尝试创建的所有选项卡后,在您的onCreate结束设置第一个选项卡为活动:

tabHost.setCurrentTab(0); 
+0

我已经尝试过,它不会改变。事实上,第一个标签已被默认选中。 – orgoz

1

继行代码导致问题 适配器=新MyAdapter(getApplicationContext()新的ArrayList()); 你正在传递大小为0的arralist,因此没有数据显示。 但是当标签在你的听众中发生变化时,你传递了包含一些数据的arralist,因此当你回来时你可以看到数据。 享受..

+0

好的。此外,您不应该在那里使用应用程序上下文。通过分配'this'来使用活动上下文。 – SBerg413

+0

感谢您的评论.. –

+0

是的,我没有数据初始化我的适配器。当onCreate()调用onTabChanged(因为第一个选项卡默认显示),我用数据更新这个适配器,但这还不够,我的选项卡内容总是空的。 我必须选择第二个标签,然后回到第一个标签,在第一个标签中看到。 – orgoz

相关问题