Android TabHost Layout Вопрос - PullRequest
       9

Android TabHost Layout Вопрос

1 голос
/ 11 января 2011

Это мое первое приложение с вкладками для Android.Я прошел через приложение «HelloTabWidget» на сайте Android, но не могу понять, как добавить контент на вкладки.FrameLayout укладывает вещи друг на друга в верхнем левом углу (из того, что я читал).Я добавил пару текстовых обзоров и imageView, но он отображает только последний добавленный элемент.Есть ли способ использовать Linear Layout вместо Frame Layout?Если нет, как вы можете разместить несколько представлений на вкладке?Единственное, что я сделал в отличие от примера, я добавил 4-ую вкладку.В одну из вкладок «Действия» я вставил следующий код, чтобы попытаться отобразить несколько элементов:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    

        TextView textview = new TextView(this);
        textview.setText("This is the About tab");
        setContentView(textview);

        TextView textview2 = new TextView(this);
        textview2.setText("About Test");
        setContentView(textview2);

        ImageView imgView = new ImageView(this);
        imgView.setImageDrawable(getResources().getDrawable(R.drawable.header));
        setContentView(imgView);
    }

Вот ссылка на пример, которому я следовал: http://developer.android.com/resources/tutorials/views/hello-tabwidget.html

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Какой у вас макет xml файла? Я использую это, и я могу сложить несколько текстовых представлений в каждой вкладке. TabActivity:

<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">
    <ScrollView android:layout_width="fill_parent" 
        android:layout_height="wrap_content" >
        <LinearLayout android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:orientation="vertical" >
            <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>
    </ScrollView>
</TabHost>

Активность внутри вкладки:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <TextView android:id="@+id/textOne" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView android:id="@+id/textTwo" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
<LinearLayout>

Я сам новичок, так что, возможно, есть лучший способ сделать это. Это работает для меня, хотя.

1 голос
/ 11 января 2011

Вы не внимательно прочитали пример.Посмотрите на точку № 6;вы увидите что-то вроде:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Resources res = getResources(); // Resource object to get Drawables
    TabHost tabHost = getTabHost();  // The activity TabHost
    TabHost.TabSpec spec;  // Resusable TabSpec for each tab
    Intent intent;  // Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, ArtistsActivity.class);

    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = tabHost.newTabSpec("artists").setIndicator("Artists",
                      res.getDrawable(R.drawable.ic_tab_artists))
                  .setContent(intent);
    tabHost.addTab(spec);

    // Do the same for the other tabs
    intent = new Intent().setClass(this, AlbumsActivity.class);
    spec = tabHost.newTabSpec("albums").setIndicator("Albums",
                      res.getDrawable(R.drawable.ic_tab_albums))
                  .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, SongsActivity.class);
    spec = tabHost.newTabSpec("songs").setIndicator("Songs",
                      res.getDrawable(R.drawable.ic_tab_songs))
                  .setContent(intent);
    tabHost.addTab(spec);

    tabHost.setCurrentTab(2);
}

Это то, что вы положили в onCreate для TabActivity.Как вы видите, он имеет 3 вида деятельности.Что вы делаете, так это используете JUST ONE и настраиваете просмотр контента 3 раза, что явно неправильно.

Итак ... как заставить это работать?Во-первых, прочитайте еще раз учебник.Во-вторых, создайте одно действие для каждой вкладки, которую вы хотите показать.И используйте модель выше, чтобы добавить эти действия к вашему TabHost.

...