Android - 一个选项卡中的多个片段 [英] Android - Multiple fragments in ONE tab

查看:14
本文介绍了Android - 一个选项卡中的多个片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在网上搜索了很多关于在一个操作栏选项卡中包含多个片段的可能性.

I searched a lot in the web about the possibility to have multiple fragments in one action bar tab.

这个问题最符合我的需要,但代码不起作用.

This question comes closest to my needs but the code is not working.

是否有另一种可能在一个选项卡中包含多个片段?

Is there another possibility to include multiple fragments in one tab?

这是StartActivity

public class StartActivity extends FragmentActivity implements ActionBar.TabListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        // Set up the action bar.
        final ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        actionBar.addTab(
              actionBar.newTab()
             .setText("Karte")
              .setTabListener(new MapFragmentListener(this)));

    }

对应的布局activity_start包含两个frame布局,两个fragment会被放置在tab中.

The corresponding layout acticity_start contains two frame layouts for the two fragments that will be placed in the tab.

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

    <FrameLayout
        android:id="@+id/fragment_map"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <FrameLayout
        android:id="@+id/fragment_realtime"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

TabListener 如下所示:

private class TabListener implements ActionBar.TabListener {

        private static final String fragment1_tag = "fragment1_tag";
        private static final String fragment2_tag = "fragment2_tag";

        private FragmentActivity activity;
        private RealtimeFragment fragment1;
        private RealtimeFragment fragment2;

        public TabListener(FragmentActivity activity) {

            this.activity = activity;

            android.support.v4.app.FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();

            fragment1 = (RealtimeFragment) activity.getSupportFragmentManager().findFragmentByTag(fragment1_tag);
            if (fragment1 != null && !fragment1.isDetached()) {
                ft.detach(fragment1);
            }

            fragment2 = (RealtimeFragment) activity.getSupportFragmentManager().findFragmentByTag(fragment2_tag);
            if (fragment2 != null && !fragment2.isDetached()) {
                ft.detach(fragment2);
            }

            ft.commit();
        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {

            android.support.v4.app.FragmentTransaction fragmentTransaction = activity.getSupportFragmentManager().beginTransaction();

            if(fragment1 == null) {
                fragment1 = new RealtimeFragment();
                fragmentTransaction.add(R.id.fragment_map, fragment1, fragment1_tag);
            } else {
                fragmentTransaction.attach(fragment1);
            }


            if(fragment2 == null) {
                fragment2 = new RealtimeFragment();
                fragmentTransaction.add(R.id.fragment_realtime, fragment2, fragment2_tag);
            } else {
                fragmentTransaction.attach(fragment2);
            }


            fragmentTransaction.commit();

        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {

            android.support.v4.app.FragmentTransaction fragementTransaction = activity.getSupportFragmentManager().beginTransaction();

            if(fragment1_tag != null)
                fragementTransaction.detach(fragment1);
            if(fragment2 != null)
                fragementTransaction.detach(fragment2);


            fragementTransaction.commit();

        }

    }

RealtimeFragment 类和对应的布局 fragment_realtime 如下所示:

The class RealtimeFragment and the corresponding layout fragment_realtime looks like this:

public class RealtimeFragment extends Fragment {

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


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

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

现在应该在一个标签中显示 RealtimeFragment 类的两个片段.片段只显示一个按钮,但没有显示!为什么?

In one tab now two fragments of the class RealtimeFragment should be displayed. The fragments just show one button but NOTHING is displayed! Why?

推荐答案

我正在寻找相同主题的解决方案,发现了这个,它非常方便.

I was looking for a solution to the same Topic, and found this, which comes in quite handy.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment android:name="com.example.news.ArticleListFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment android:name="com.example.news.ArticleReaderFragment"
            android:id="@+id/viewer"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>

所以引用你的 Fragment 并对其进行膨胀,就像普通的 Fragment 一样

so Reference your Fragments and inflate it, just like a normal Fragment

这篇关于Android - 一个选项卡中的多个片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆