1

我正在开发一个带有使用选项卡布局的 Activity 的 Android 应用程序。有两个选项卡可以在某些 TextView 中显示的内容之间切换。

这意味着两个选项卡规范指向内容的相同布局(线性),R.id.plantilla:

<?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="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <include layout="@layout/plantilla"/>


    </FrameLayout>
</LinearLayout>

但这仅在我切换到选项卡 2 并返回到 1 时才有效,即当活动启动时,在更改选项卡之前无法看到布局“植物”。这是我的问题。

解决这个问题的最简单方法是什么?

PD:我试图复制这条线

<include layout="@layout/plantilla">

在 tabhost xml 中,但在这种情况下,我无法使用 findViewById(R.id.someTextView); 从 Java 代码访问 TextViews 对象;

4

2 回答 2

1

我不相信你可以使用包含,我认为你需要在 xml 中使用不同的 id 标签实际定义你的布局两次。

或者您可以简单地定义容器视图,然后以编程方式向其中添加视图。我以前做过。我是这样做的:

表格布局

<?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:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:padding="5dp" >
            <TextView
                    android:id="@+id/setupheader"
                    android:layout_width="fill_parent"
                    android:layout_height="20dp"
                    android:textSize="15dp" />
            <TabWidget
                    android:id="@android:id/tabs"
                    android:layout_width="fill_parent"
                    android:layout_height="30dp"
                    android:gravity="bottom" />
            <FrameLayout
                    android:id="@android:id/tabcontent"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:padding="5dp" >
                    <!-- General Info Tab -->
                    <LinearLayout
                            android:id="@+id/general_tab"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:orientation="vertical" >
                    </LinearLayout>
                    <!-- Tool Tab -->
                    <LinearLayout
                            android:id="@+id/tool_tab"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:orientation="vertical" >
                            <ListView
                                    android:id="@+id/list1"
                                    android:layout_width="match_parent"
                                    android:layout_height="0dp"
                                    android:layout_weight="1"
                                    android:drawSelectorOnTop="false" />
                    </LinearLayout>
                    <!-- Offset Tab -->
                    <LinearLayout
                            android:id="@+id/offset_tab"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:orientation="vertical" >
                            <ListView
                                    android:id="@+id/list2"
                                    android:layout_width="match_parent"
                                    android:layout_height="0dp"
                                    android:layout_weight="1"
                                    android:drawSelectorOnTop="false" />
                    </LinearLayout>
                    <!-- Notes Tab -->
                    <LinearLayout
                            android:id="@+id/note_tab"
                            android:layout_width="fill_parent"
                            android:layout_height="fill_parent"
                            android:orientation="vertical" >
                    </LinearLayout>
            </FrameLayout>
    </LinearLayout>
</TabHost>

以下是我的选项卡活动(我已经删除了重要部分,但它应该很好地展示了我是如何在没有为每个选项卡单独活动的情况下进行选项卡的)。

选项卡活动

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

            Bundle extras = getIntent().getExtras();
            RowId = extras.getLong("RowId");
            StartTab = extras.getInt("StartTab");

            // ***************************************************************
            // Set up the tabs in the tabhost
            // ***************************************************************
            tabHost = getTabHost();
            TabHost.TabSpec spec;
            spec = tabHost.newTabSpec("General").setIndicator("General")
                            .setContent(R.id.general_tab);
            tabHost.addTab(spec);
            spec = tabHost.newTabSpec("Tools").setIndicator("Tools")
                            .setContent(R.id.tool_tab);
            tabHost.addTab(spec);
            spec = tabHost.newTabSpec("Offsets").setIndicator("Offsets")
                            .setContent(R.id.offset_tab);
            tabHost.addTab(spec);
            spec = tabHost.newTabSpec("Notes").setIndicator("Notes")
                            .setContent(R.id.note_tab);
            tabHost.addTab(spec);
            populateTabs(StartTab);
    }

    // ***************************************************************
    // Clear views from linear layout tabs
    // ***************************************************************
    private void clearTabs() {
            general.removeAllViews();
            notes.removeAllViews();
    }

    // ***************************************************************
    // Fill the tabs
    // ***************************************************************
    private void populateTabs(int TabShown) {

            generaltab();
            tooltab();
            notestab();
            offsettab();

            tabHost.setCurrentTab(TabShown);
    }

    // ***************************************************************
    // Fill the General tab
    // ***************************************************************
    private void generaltab() {
        general = (LinearLayout) findViewById(R.id.general_tab);
        String prgdisp = SETUPINFO_PGM1;
        if (SETUPINFO_PGM2 != null) {
            prgdisp = prgdisp + ", " + SETUPINFO_PGM2;
        }
        if (SETUPINFO_PGM3 != null) {
            prgdisp = prgdisp + ", " + SETUPINFO_PGM3;
        }
        TextView programs = new TextView(this);
        programs.setText("Program(s): " + prgdisp);
        programs.setTextSize(20);
        general.addView(programs);

        if (SETUPINFO_KIT == null || SETUPINFO_KIT.equals("No Kit")) {
        } else {
            TextView kit = new TextView(this);
            kit.setText("Kit: " + SETUPINFO_KIT);
            kit.setTextSize(20);
            general.addView(kit);
        }

        if (SETUPINFO_FIXTURE1 == null && SETUPINFO_FIXTURE2 == null) {
        } else {
            String fixtdisp = SETUPINFO_FIXTURE1;
            if (SETUPINFO_FIXTURE2 != null) {
                fixtdisp = fixtdisp + ", " + SETUPINFO_FIXTURE2;
            }
            TextView fixtures = new TextView(this);
            fixtures.setText("Fixture(s): " + fixtdisp);
            fixtures.setTextSize(20);
            general.addView(fixtures);
            TextView fixtureloc = new TextView(this);
            fixtureloc.setText("Fixture Location: " + SETUPINFO_FIXTURELOC);
            fixtureloc.setTextSize(20);
            general.addView(fixtureloc);
        }

        if (SETUPINFO_VISE == null) {
        } else {
            TextView vise = new TextView(this);
            vise.setText("Vise(s): " + SETUPINFO_VISE);
            vise.setTextSize(20);
            general.addView(vise);
        }
    }

    // ***************************************************************
    // Fill the Offset tab
    // ***************************************************************
    private void offsettab() {
            wpccount = 0;
            for (int i = 0; i < 20; i++) {
                    if (wpcdesc[i] != null) {
                            wpcdisplayhold[wpccount] = wpcid[i] + " - " + wpcdesc[i];
                            wpcidhold[wpccount] = wpcid[i];
                            wpcdeschold[wpccount] = wpcdesc[i];
                            wpccount++;
                    }
            }
            wpcdisplay = new String[wpccount];
            for (int i = 0; i < wpccount; i++) {
                    wpcdisplay[i] = wpcdisplayhold[i];
            }
            mWPCView = (ListView) findViewById(R.id.list2);
            mWPCView.setAdapter(new ColorizingListAdapter(SetupDisplay.this,
                            wpcdisplay, "Offset"));
            registerForContextMenu(mWPCView);
    }

    // ***************************************************************
    // Fill the Notes tab
    // ***************************************************************
    private void notestab() {
            notes = (LinearLayout) findViewById(R.id.note_tab);
            notestxt = new TextView(this);
            notestxt.setText(SETUPINFO_NOTES);
            notestxt.setTextSize(15);
            notes.addView(notestxt);
    }

}

希望这可以帮助。

于 2012-03-24T16:14:09.760 回答
0

请从您的 xml 布局中删除包含标记并留下一些简单的内容:

<?xml version="1.0" encoding="utf-8"?>
<!-- Tab Host -->
<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">

    <!-- Bottom tab bar -->
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:layout_weight="1"/>

        <!-- -5dip bottom margin for not showing the annoying bottom line -->
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="65dip"
            android:layout_weight="0"
            android:layout_marginBottom="-5dip"/>

    </LinearLayout>

</TabHost>

从您的 TabActivity 类中,只需将其放入 onCreate() 中:

            //Set tab host
        tabHost = getTabHost();

        //First Tab
        TabSpec firstTabSpec = tabHost.newTabSpec("FirstTab");//title
        firstTabSpec.setIndicator("FirstTab", getResources().getDrawable(R.drawable.item_first_tab)); //icon
        Intent firstTabIntent = new Intent(this, FirstTab.class);//action
        firstTabSpec.setContent(firstTabIntent);//set tab

        //Second Tab
        TabSpec secondTabSpec = tabHost.newTabSpec("SecondTab");//title
        secondTabSpec.setIndicator("SecondTab", getResources().getDrawable(R.drawable.second_tab));//icon
        Intent secondTabIntent = new Intent(this, FirstTab.class);//action
        secondTabSpec.setContent(secondTabIntent);//set tab

        //Add tabs to tab host
        tabHost.addTab(firstTabSpec);//add first tab
        tabHost.addTab(secondTabSpec);//add second tab which goes to your FirstTab.class

您可以为您的选项卡创建不同的活动或使用单个活动。

于 2012-03-24T15:08:58.977 回答