Android: tabactivity - содержимое всех вкладок сначала перекрывается - PullRequest
1 голос
/ 23 сентября 2011

Я тестировал TabActivity со списком на каждой вкладке.

Во время работы приложения содержимое вкладок перекрывается следующим образом. enter image description here

После того, как я нажму на вкладки, перекрытие очищается. Вот мой код:

макет testtabs.xml:

<?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">
        <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">
            <ListView
                android:id="@+id/list1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1">
            </ListView>
            <ListView
                android:id="@+id/list2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1">
            </ListView>
        </FrameLayout>
    </LinearLayout>
</TabHost>

И тестовая активность

public class TabbedActivity extends TabActivity {

    private static final String LIST1_TAB_TAG = "List1";
    private static final String LIST2_TAB_TAG = "List2";
    private ListView listView1;
    private ListView listView2;
    private TabHost tabHost;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testtabs);
        tabHost = getTabHost();

        // setup list view 1
        listView1 = (ListView) findViewById(R.id.list1);
        // create some dummy strings to add to the list
        List<String> list1Strings = new ArrayList<String>();
        list1Strings.add("List 11");
        list1Strings.add("List 12");
        list1Strings.add("List 13");
        list1Strings.add("List 14");
        listView1.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, list1Strings));

        // setup list view 2
        listView2 = (ListView) findViewById(R.id.list2);
        List<String> list2Strings = new ArrayList<String>();
        list2Strings.add("Test2 List 21");
        list2Strings.add("Testing 22");
        list2Strings.add("More test 23");
        list2Strings.add("Test Again 24");

        listView2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list2Strings));

        // add views to tab host
        tabHost.addTab(tabHost.newTabSpec(LIST1_TAB_TAG).setIndicator(LIST1_TAB_TAG).setContent(new TabContentFactory() {
            public View createTabContent(String arg0) {
                return listView1;
            }
        }));
        tabHost.addTab(tabHost.newTabSpec(LIST2_TAB_TAG).setIndicator(LIST2_TAB_TAG).setContent(new TabContentFactory() {
            public View createTabContent(String arg0) {
                return listView2;
            }
        }));
        tabHost.setCurrentTab(0);
    }
}

Ответы [ 3 ]

3 голосов
/ 23 сентября 2011

Вы можете удалить оба ListView из макета XML и просто создать их в коде Java.

например. listView1 = новый ListView (this);

Все будет хорошо.

2 голосов
/ 30 марта 2012

Другое решение, которое я нашел, - добавить следующий тег в оба списка в XML-файле макета:

android:visibility="invisible"
1 голос
/ 23 сентября 2011

Вы берете два ListView в FrameLayout, что является причиной вашего перекрытия.

Если вы хотите, чтобы у вас был один ListView под другим, сохраняйте ListView внутри LinearLayout, как это,

<?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">
        <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">

             <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
            <ListView
                android:id="@+id/list1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1">
            </ListView>
            <ListView
                android:id="@+id/list2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1">
            </ListView>
            </LinearLayout>
        </FrameLayout>
    </LinearLayout>
</TabHost>
...