1

我有一个列表视图,现在我正在尝试为此列表视图设置选项卡视图。

现在有时有 3 个选项,有时是 2,有时是 1。正如您在此处看到的

在此处输入图像描述

当单击选项卡时,我将根据单击选项卡栏中的哪个项目用新数据重新加载我的列表视图。但这是相似的数据,所以它将在同一个列表视图中,我想使用相同的 xml 布局。但目前我无法做到这一点,我看不到让它发挥作用。

这就是我所拥有的

 myTabHost =(TabHost) findViewById(R.id.TabHost01);
    myTabHost.setup();

    TabHost.TabSpec spec1 = myTabHost.newTabSpec("First Tab");
    spec1.setIndicator("First Tab", getResources().getDrawable(android.R.drawable.ic_menu_add));
    spec1.setContent(R.id.tab1);
    myTabHost.addTab(spec1);

    myTabHost.addTab(myTabHost.newTabSpec("Second Tab").
            setIndicator("Second Tab", getResources().getDrawable(android.R.drawable.ic_menu_edit)).setContent(R.id.tab2));

这是将其设置为 2 个选项卡,然后在我拥有的 xml 中

<include
                android:id="@+id/tab1"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                layout="@layout/item_list_view">


            </include>

            <include
                android:id="@+id/tab2"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                layout="@layout/test">


            </include>

但是我想使用相同的布局而不是不同的布局并重新加载数据但是当我将选项卡 .setContent 设置为相同的 id 时它不起作用?

所以基本问题是如何为多个选项卡使用相同的 xml,并在列表视图中加载不同的数据?

如果重要,标签栏将填充文本而不是图像。看过一些教程,但对我的情况没有帮助 https://www.youtube.com/watch?v=OeNC_sShJXs https://www.youtube.com/watch?v=1-u3toC6ctY

所以我需要一些帮助来设置它。

我在这里先向您的帮助表示感谢 :)

4

2 回答 2

2

据我了解,这个问题涉及两个部分:

  1. 以编程方式创建选项卡。
  2. 在选项卡之间共享相同的内容视图。

对于第一部分,您可以TabHost在布局中放置一个“空”,然后addTab()稍后调用,具体取决于您要显示的选项卡。例如,布局文件将是:

<?xml version="1.0" encoding="utf-8"?>
<TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/TabHost01"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </TabWidget>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">
        </FrameLayout>
    </LinearLayout>
</TabHost>

然后,在onCreate()

TabHost tabHost = (TabHost)findViewById(R.id.TabHost01);
tabHost.setup();
tabHost.addTab(tabHost.newTabSpec(...));
tabHost.addTab(tabHost.newTabSpec(...));

其中 eachTabHost.TabSpec指定每个选项卡的指示符和内容。

现在,至于第二部分,您需要一个 ListView部件并在用户切换选项卡时更改其数据。这实际上很容易,因为它TabHost可以处理多个选项卡具有相同内容的情况而不会出现问题。您只需要为每个选项卡设置一个TabHost.TabContentFactory,并让每个选项卡返回相同的视图。

例如:

mListView = new ListView(this);

TabHost tabHost = (TabHost)findViewById(R.id.TabHost01);
tabHost.setup();
tabHost.addTab(tabHost.newTabSpec("1").setIndicator("First").setContent(mDummyTabContent));
tabHost.addTab(tabHost.newTabSpec("2").setIndicator("Second").setContent(mDummyTabContent));
tabHost.addTab(tabHost.newTabSpec("3").setIndicator("Third").setContent(mDummyTabContent));

其中mTabContent初始化为:

private final TabHost.TabContentFactory mDummyTabContent = new TabHost.TabContentFactory()
{
    @Override
    public View createTabContent(String tag)
    {
        return mListView;
    }
};

然后剩下的最后一步是添加一个TabHost.OnTabChangeListener在 single 中切换数据的ListView

tabHost.setOnTabChangedListener(mOnTabChangedListener);
mOnTabChangedListener.onTabChanged("1");

在哪里:

private TabHost.OnTabChangeListener mOnTabChangedListener = new TabHost.OnTabChangeListener()
{
    @Override
    public void onTabChanged(String tabId)
    {
        String[] data;

        if (tabId.equalsIgnoreCase("1"))
            data = FIRST_ITEMS;
        else if (tabId.equalsIgnoreCase("2"))
            data = SECOND_ITEMS;
        else
            data = THIRD_ITEMS;

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(FakeTabViewActivity.this, android.R.layout.simple_list_item_1, data);
        mListView.setAdapter(adapter);
    }
};

此处提供了带有活动和布局文件的示例要点。

于 2014-12-21T23:28:46.270 回答
2

将 TabHost 视图添加到您的布局中。您可以使用 addTab() 方法动态添加任意数量的选项卡。

public class MainActivity extends Activity {

private TabHost myTabHost;

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTabHost =(TabHost) findViewById(R.id.TabHost01);
            mytabhost.setup();

TabSpec spec = mytabhost.newTabSpec("tab_creation");
spec.setIndicator("Create adresse",getResources().getDrawable(android.R.drawable.ic_menu_add));
    spec.setContent(R.id.onglet1);
    mytabhost.addTab(spec);

    mytabhost.addTab(mytabhost.newTabSpec("tab_inser").setIndicator("Delete",getResources().getDrawable(android.R.drawable.ic_menu_edit)).setContent(R.id.Onglet2));

   mytabhost.addTab(mytabhost.newTabSpec("tab_affiche").setIndicator("Show All",getResources().getDrawable(android.R.drawable.ic_menu_view)).setContent(R.id.Onglet3));

   ListView lv=(ListView) findViewById(R.id.listView1);
   MyListAdapter adapter =new MyListAdapter(this);
   lv.setAdapter(adapter);              
 }
}

完整参考: http: //mrbool.com/how-to-create-an-activity-android-with-a-tabhost-view/27990

于 2014-12-19T05:53:21.133 回答