質問

So I'm developing an app and until now, I was using ordinary tab layout with two activities. Now someone told me that it's much better to do it usning FragmentTabHost. So I've been reading some docs and this is what I came up with so far:

MainActivity_Fragment:

public class MainActivity_Fragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.activity_main, container, false);
    }

}

RecordedLibrary_Fragment:

public class RecordedLibrary_Fragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.activity_recorded_library, container, false);
    }
}

TabLayout activity:

public class TabLayout extends FragmentActivity {

//GLOBAL VARIABLES///////////////
private FragmentTabHost mTabHost;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tab_layout);

    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), r.id....); // <-- problem here

    mTabHost.addTab(mTabHost.newTabSpec("Recording").setIndicator("Recording"),
            MainActivity_Fragment.class, null);

    mTabHost.addTab(mTabHost.newTabSpec("Library").setIndicator("Library"),
            RecordedLibrary_Fragment.class, null);
    }
}

Now this is where I am stuck. There are a few things that aren't explained in the docs. So I have two questions.

This line in the docs:

mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

Where did they get R.id.realtabcontent ?

And another thing that isn't explained; how should the xml of the tab activity look?

My current tab layout xml:

<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:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <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>

As you can see, the tab layout xml is still from the old tab layout. Do I need to adjust it to FragmentTabLayout or is it good this way?

役に立ちましたか?

解決

Now someone told me that it's much better to do it usning FragmentTabHost.

Well, I did say "FragmentTabHost is probably the least popular of the 3, though it's closest to your current code."

Where did they get R.id.realtabcontent ?

That's the ID of a widget in a layout. Specifically it would be in R.layout.fragment_tabs, which the documentation neglects to show.

Fortunately, this appears to be from the support package samples, and that layout can be found here, with the definition at the time of this writing as:

<android.support.v4.app.FragmentTabHost
    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:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TabWidget
            android:id="@android:id/tabs"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"/>

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

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

    </LinearLayout>
</android.support.v4.app.FragmentTabHost>

And another thing that isn't explained; how should the xml of the tab activity look?

See above.

Do I need to adjust it to FragmentTabLayout or is it good this way?

Well, if nothing else, you will need to replace TabHost with FragmentTabHost.

But, frankly, FragmentTabHost is worse off, documentation-wise, than I was remembering when I commented on your earlier question.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top