单击tabhost时,选项卡内容不会更改

时间:2014-01-13 16:56:35

标签: android android-layout android-fragments tabs android-tabhost

我尝试创建一个底部tabhost +片段。

问题是,

1)当我按下标签按钮时,它不会切换到另一个片段,尽管我的日志显示它已在创建视图中输入。我厌倦了对每个片段都放了一个文本视图,但没有一个显示,所以我怀疑片段没有添加到framelayout id:realtabcontent?

2)底部标签主机似乎“太底”,以便标签的一部分底部   不在屏幕上

如何解决问题?谢谢你的帮助

主要活动

public class MainActivity extends FragmentActivity {
    public FragmentTabHost tabHost;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tabHost = (FragmentTabHost) findViewById(R.id.tabhost);
        tabHost.setup(this, getSupportFragmentManager(), R.id.tabcontent);
        tabHost.addTab(
                setIndicator(this, tabHost.newTabSpec("About"),
                        R.drawable.ic_launcher), About.class, null);
        tabHost.addTab(
                setIndicator(this, tabHost.newTabSpec("Camera"),
                        R.drawable.ic_launcher), CameraHandle.class, null);
        tabHost.addTab(
                setIndicator(this, tabHost.newTabSpec("Gallery"),
                        R.drawable.ic_launcher), PhotoGallery.class, null);
        tabHost.addTab(
                setIndicator(this, tabHost.newTabSpec("LeaderBoard"),
                        R.drawable.ic_launcher), LeaderBoard.class, null);
    }

    public TabSpec setIndicator(Context ctx, TabSpec spec, int resId) {
        // TODO Auto-generated method stub
        View v = LayoutInflater.from(ctx).inflate(R.layout.custom_tab, null);
        ImageView logo = (ImageView) v.findViewById(R.id.tab_logo);
        logo.setImageResource(resId);
        TextView text = (TextView) v.findViewById(R.id.tab_title);
        text.setText(spec.getTag());
        return spec.setIndicator(v);
    }

}

XML:

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

    <FrameLayout
        android:id="@+id/realtabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" />

    <android.support.v4.app.FragmentTabHost
        android:id="@+id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <FrameLayout
            android:id="@+id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />
    </android.support.v4.app.FragmentTabHost>

</LinearLayout>

片段(每个标签一个片段)

public class About extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.about, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

}

XML:

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextVsssiew" />

</LinearLayout>

2 个答案:

答案 0 :(得分:1)

你的主要活动布局有问题 - 它的高度为0px。您可以使用Android工具中的hierarchyviewer查找应用中显示的视图的一些详细信息 - 有关详细信息,请参阅:(http://developer.android.com/tools/debugging/debugging-ui.html

尝试以下内容并从那里开始:

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

    <android.support.v4.app.FragmentTabHost
        android:id="@+id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:orientation="horizontal" />

    <FrameLayout
        android:id="@+id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>

答案 1 :(得分:1)

您应该尝试使用like this布局来设置屏幕底部的标签。

<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" >

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

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="-4dp"
        android:layout_weight="0" />
</LinearLayout>