2011-04-10 75 views
4

我有两个选项卡的TabActivity。活动的布置如下:TabHost在开头没有显示内容

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost" android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<LinearLayout android:orientation="vertical" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:padding="5dp"> 

    <TabWidget android:id="@android:id/tabs" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" /> 
    <FrameLayout android:id="@android:id/tabcontent" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:padding="5dp"> 
     <ListView android:id="@+id/list" 
      android:layout_width="fill_parent" android:layout_height="fill_parent" /> 

    </FrameLayout> 
</LinearLayout> 
</TabHost> 

布局由(),其在相应setOnTabChangedListener填充一个ListView的。填写清单并显示它没有问题。

我的问题是,活动开始时不显示列表视图,虽然我通过ID找到它并填充它;它只是在我更改标签后填充。

,并在OnCreate(..)的代码如下所示:

l = (ListView) findViewById(R.id.list); 
l.setAdapter(new CommentsAdapter(this, (JSONArray) obj)); 

TabSpec spec; 
    spec = tabHost.newTabSpec("0").setIndicator("0", 
      res.getDrawable(R.drawable.tab_recent)).setContent(
      R.id.list); 
    tabHost.addTab(spec); 

    spec = tabHost.newTabSpec("1").setIndicator("1", 
      res.getDrawable(R.drawable.tab_pop)).setContent(
      R.id.list); 
    tabHost.addTab(spec); 

    tabHost.setOnTabChangedListener(new OnTabChangeListener() { 

     @Override 
     public void onTabChanged(String tabId) { 
      // TODO Auto-generated method stub 
      int tab = Integer.valueOf(tabId); 
      showDialog(WAIT_DIALOG); 

      switch (tab) { 
      // recent 
      case 0: 
       //refill the list 
       break; 
      // popular 

      case 1: 
       //refill the list 
       break; 
      } 
     } 
    }); 

    tabHost.setCurrentTab(0); 

任何提示?

+0

就可以把标签的所有代码,使我们可以有外观和告诉 – Sumant 2011-04-10 12:58:59

+0

只是把Java代码及新界XML堂妹乌尔XML可能被罚款ontab更改列表视图是显示 – Sumant 2011-04-10 13:13:04

回答

-2

你只是做其他活动中列表视图中存在&把下面的一个

Intent i1 = new Intent(tabs.this,listDisplay.class); 
spec=tabHost.newTabSpec("0").setIndicator("0",res.getDrawable(R.drawable.      tab_recent)).setContent(i1);           

也把tabHost.setCurrentTab(0);ontabChangeListener希望这可以帮助..

希望这可能解决问题..

+1

我不想使用单独的活动@Sumant。该解决方案是无效的。 – olix20 2011-04-10 13:32:41

8

我有一个类似的问题。我注意到,如果你这样做

tabHost.setCurrentTab(0); 

然后onTabChanged没有触发。但是,如果你这样做

tabHost.setCurrentTab(1); 

然后它是,列表显示出来,它都很好。至于为什么会发生这种情况,对我来说这仍然是一种莫名其妙的感觉。

使用此作弊在onCreate()的第一个选项卡上启动您的应用程序: ,先创建选项卡调用后: tabHost.setCurrentTab(1); 然后调用: tabHost.setCurrentTab(0);

+0

这可能工作,如果我的第二个标签没有尝试更新其内容之前,第一个执行,'java.lang.IllegalStateException:内容视图尚未创建' – 2014-03-17 03:09:09

+0

@MikeFlynn没有更多的上下文我不知道如何回复 – Stephan 2014-03-17 17:35:08

+1

我面临这个问题,即使5年后有没有人得到解决方案? – Imdad 2016-07-22 05:59:17

1

您可以尝试使用不同的布局,说

spec = tabHost.newTabSpec("0").setIndicator("0", 
     res.getDrawable(R.drawable.tab_recent)).setContent(
     R.id.list1); 
tabHost.addTab(spec); 

spec = tabHost.newTabSpec("1").setIndicator("1", 
     res.getDrawable(R.drawable.tab_pop)).setContent(
     R.id.list2); 
tabHost.addTab(spec);