Как назначить действия в качестве вкладки? - PullRequest
1 голос
/ 27 января 2012

Я нашел этот пользовательский макет TabWidget в Интернете. Проблема в том, что я не знаю, как вставить содержимое во вкладки. Может ли кто-нибудь помочь в этом? Скажем, у меня активность1, активность2 и активность3. Вот код:

public class MainActivity extends Activity {
private TabHost mTabHost;

private void setupTabHost() {
    mTabHost = (TabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup();
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    setupTabHost();
    mTabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);

    setupTab(new TextView(this), "EASY");
    setupTab(new TextView(this), "MEDIUM");
    setupTab(new TextView(this), "INTENSE");
}

private void setupTab(final View view, final String tag) {
    View tabview = createTabView(mTabHost.getContext(), tag);

    TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview).setContent(new TabContentFactory() {
        public View createTabContent(String tag) {return view;}
    });
    mTabHost.addTab(setContent);

}

private static View createTabView(final Context context, final String text) {
    View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
    TextView tv = (TextView) view.findViewById(R.id.tabsText);
    tv.setText(text);
    return view;
}
}

Ответы [ 4 ]

1 голос
/ 27 января 2012

Вы помещаете контент в действия, создавая свои собственные файлы, объявляя их в манифесте и помещая их в элемент setContentView(R.layout.activitylayout);.И если содержимое статично, оно полностью описано в соответствующем макете.

Хорошо, понятно.затем верните как view здесь public View createTabContent(String tag) {return view;} тот макет, который вы хотите разместить там.Некоторые listViewOfMyPictures или вещи.

0 голосов
/ 19 октября 2012

Я тоже столкнулся с той же проблемой и решил ее, изменив код, приведенный ниже.

setupTab1(new TextView(this), "MEDIUM");
setupTab2(new TextView(this), "INTENSE");


private void setupTab1(final View view, final String tag) {

View tabview = createTabView(mTabHost.getContext(), string);

Intent intent1 = new Intent().setClass(this, DummyActivity1.class);
TabSpec tab1 = mTabHost
    .newTabSpec("TAB1")
    .setIndicator(tabview)
    .setContent(intent1);

mTabHost.addTab(tab1);

}

private void setupTab2(final View view, final String tag) {
View tabview = createTabView(mTabHost.getContext(), string);

Intent intent2 = new Intent().setClass(this, DummyActivity2.class);
TabSpec tab2 = mTabHost
    .newTabSpec("TAB2")
    .setIndicator(tabview)
    .setContent(intent2);

mTabHost.addTab(tab2);

}

Ранее у нас был метод setupTab () для всех Tabview. Теперь у нас есть разные методы setupTab () с различной активностью.

Это сработало для меня ..! Надеюсь, это поможет вам.

0 голосов
/ 27 января 2012

Создайте намерение для конкретного действия и добавьте намерение через setContent в tabSpec вместо того, где вы в настоящее время создаете TabContentFactory - как это (скопируйте / вставьте из учебника Hello Tabwidget в Руководство разработчика Android):

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);
0 голосов
/ 27 января 2012

Попробуйте просмотреть документы для TabHost.TabSpec , в частности setContent(Intent intent).

Создайте намерения, например Intent tabIntentA = new Intent(this, SomeActivity.class);, и передайте их методу setContent(...).

РЕДАКТИРОВАТЬ:

Посмотрите на раздел 6 учебника Макет вкладки - особенно этот код ...

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);

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

...