TabHost Android не работает правильно - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь заставить этот TabHost работать.Когда я добавляю TabHost в макет xml и запускаю программу, я вижу различный контент для каждой вкладки, расположенной друг над другом.Это говорит мне, что макет работает правильно.Затем я добавляю свой код спецификации в действие, а затем, если я закрываю программу на эмуляторе, когда я перехожу к этому экрану.
Так вот мой XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/tWelcome"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
    android:id="@+id/bNewTask"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Add Task" />

<TabHost
    android:id="@+id/myTabs"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TabWidget
            android:id="@+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="match_parent" >

            <LinearLayout
                android:id="@+id/tab1"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <ListView
                    android:id="@+id/listView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1" >
                </ListView>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/tab2"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <TextView
                    android:id="@+id/tTest"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Test"
                    android:textAppearance="?android:attr/textAppearanceLarge" />
            </LinearLayout>
        </FrameLayout>
    </LinearLayout>
 </TabHost>

</LinearLayout>

Вот теперь мой код активности:(Единственная часть, которая имеет значение ...)

            welcomeName = (TextView) findViewById(R.id.tWelcome);
    Test = (TextView) findViewById(R.id.tTest);
    newTask = (Button) findViewById(R.id.bNewTask);
    myTask = (ListView) findViewById(R.id.listView);
    TabHost th = (TabHost) findViewById(R.id.myTabs);

    welcomeName.setText("Welcome " + ToDoActivity.myUser.getName() + "!");

    th.setup();
    TabSpec specs = th.newTabSpec("tag1");
    specs.setContent(R.id.tab1);
    specs.setIndicator("All");
    th.addTab(specs);
    specs = th.newTabSpec("tag2");
    specs.setContent(R.id.tab2);
    specs.setIndicator("Personal");
    th.addTab(specs);

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Это учебная страница по Android для вкладок: http://developer.android.com/resources/tutorials/views/hello-tabwidget.html

В нем есть информация и требования к вкладкам, а также множество примеров кода. Вы должны быть в состоянии скопировать-вставить оттуда и затем редактировать.

В частности, я бы изменил идентификаторы для всех элементов Tab на рекомендуемые идентификаторы Android:

android:id/tabhost
android:id/tabs
android:id/tabcontent
0 голосов
/ 29 марта 2012

На ум приходит пара возможностей.

Если вы используете TabActivity (не является обязательным требованием, но упрощает задачу), в качестве идентификатора у tabhost должен быть android:id="@android:id/tabhost".

Я также видел, что там сказано, что tabhost должен быть корневым узлом.Я не могу подтвердить, что с помощью Android документов.Я, вероятно, внесу это изменение после того, как все другие пути потерпели неудачу (или кто-то подтвердит, что это правда).

Если вы используете TabActivity, вам не нужно ссылаться на tabhost по идентификатору или использовать метод setup ().Я вижу, что вы используете метод setup (), но я не могу сказать, является ли ваше действие TabActivity.Если это так, возможно, это является причиной вашей проблемы.

Ниже приведен метод, который я использую для настройки макета вкладки, и он работает для меня.Обратите внимание, что здесь предполагается, что tabhost является корневым узлом макета, и он имеет android:id/tabhost в качестве идентификатора, и это TabActivity.

код tabhost:

public class Tabs extends TabActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);

        TabHost tabHost = getTabHost();
        TabHost.TabSpec spec;

        spec = tabHost.newTabSpec("tag1").setIndicator("All").setContent(R.id.tab1);
        tabHost.addTab(spec);
        spec = tabHost.newTabSpec("tag2").setIndicator("Personal").setContent(R.id.tab2);
        tabHost.addTab(spec);
    }
}

Надеюсь, это поможет!(Обязательно нажмите на галочку, чтобы принять ответ, если он решит вашу проблему).

...