Раздувание нескольких экземпляров одного макета во вкладки - PullRequest
1 голос
/ 23 октября 2011

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

Ситуация проста: у меня есть пять вкладок, которые должны содержатьтот же макет с немного другим содержанием (например, с помощью setText для изменения одной из меток).Таким образом, я раздуваю макет пять раз и добавляю их все как отдельные вкладки.

Это мой код:

package com.test;

import android.app.TabActivity;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.TabHost;
import android.widget.TextView;

public class TestActivity extends TabActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TabHost host = getTabHost();
        Resources res = getResources();

        String[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };

        for (int i = 0; i < days.length; i++)
        {
            View contents = getLayoutInflater().inflate(R.layout.test, host.getTabContentView(), true);

            ((TextView)contents.findViewById(R.id.title)).setText(days[i]);

            host.addTab
            (
                host.newTabSpec(days[i]).
                setIndicator(days[i]).
                setContent(contents.getId())
            );

            host.getTabWidget().getChildAt(i).getLayoutParams().height = 55;
        }
    }
}

И мой файл макета выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="6dip">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Test"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

Проблема в том, что вместо текста на отдельных вкладках весь текст накладывается друг на друга и одинаков для каждой вкладки.Это может быть что-то действительно простое, что я пропускаю.Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 23 октября 2011
 all the text overlaps eachother and is the same for every tab

Они не перекрывают друг друга из моего открытия.Если вы удалите android:text="Test" из вашего файла макета, вы увидите только пятницу на всех вкладках.

Похоже, вам нужно будет использовать TabContentFactory для достижения того, что вы хотите.Вот мое решение вашей проблемы.Это даст вам то, что вам нужно.

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

    final TabHost host = getTabHost();
    Resources res = getResources();

    final String[] days = { "Monday", "Tuesday", "Wednesday", "Thursday",
            "Friday" };

    for (int i = 0; i < days.length; i++) {
        TabHost.TabSpec spec=host.newTabSpec(days[i]);
        spec.setContent(new TabHost.TabContentFactory() {
            public View createTabContent(String tag) {
                View wv = getLayoutInflater().inflate(R.layout.test, host.getTabContentView(), false);
                ((TextView) wv.findViewById(R.id.title)).setText(tag);
                return(wv);
            }
        });
        spec.setIndicator(days[i]);
        host.addTab(spec);
    }
    host.setCurrentTab(0);
}

Вот ссылка, с которой я начинаю. https://github.com/commonsguy/cw-android/tree/master/Fancy/DynamicTab

Кредит идет Марку Мерфи (Commonsguy).

0 голосов
/ 23 мая 2012

Это забавно, но моя проблема была решена, когда я передал уникальный текст для каждой вкладки (то есть days [i] , вместо константы "Friday":)

TabHost.TabSpec spec=host.newTabSpec(days[i]);
...