如何在具有四个片段的屏幕中实现视图寻呼机?

时间:2013-01-19 13:44:19

标签: android android-fragments android-viewpager

每个屏幕的平板电脑应用程序分为四个部分(四个片段)。我在单个布局中添加了四个片段到片段事务。现在我必须实现视图寻呼机。我怎样才能做到这一点。使用该视图分页器库我必须将片段管理器和片段列表作为参数传递。在我的场景中如何一次传递每4个参数?

我的主要活动是:

> public void onCreate(Bundle savedInstanceState) {
>       super.onCreate(savedInstanceState);
>       setContentView(R.layout.activity_main);         NewsFragment[]
> newsFragment_obj = new NewsFragment[GlobalValues.titile.length];
> 
>       fragMentTra = getFragmentManager().beginTransaction();
> 
>       for (int i = 0; i < GlobalValues.titile.length; i++) {
>           newsFragment_obj[i] = new NewsFragment(GlobalValues.titile[i],
>                   GlobalValues.content[i]);       }
> 
>       fragMentTra.add(R.id.fragment_container1, newsFragment_obj[0],
>               "Fragment1");       fragMentTra.add(R.id.fragment_container2, newsFragment_obj[1],
>               "Fragment2");       fragMentTra.add(R.id.fragment_container3, newsFragment_obj[2],
>               "Fragment3");       fragMentTra.add(R.id.fragment_container4, newsFragment_obj[3],
>               "Fragment4");
> 
>       fragMentTra.commit();   }

这就是我将四个片段添加到屏幕的方式。现在我只是在查看寻呼机。那么请告诉我如何使用带有示例代码的view pager实现这一目标。

我的XML文件是:

<LinearLayout
    android:id="@+id/upper"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/up_left_area"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="#ffff66" >

        <FrameLayout
            android:id="@+id/fragment_container1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/up_right_area"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="#ccffff" >

        <FrameLayout
            android:id="@+id/fragment_container2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>
</LinearLayout>

<LinearLayout
    android:id="@+id/lower"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/down_left_area"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="#66cc33" >

        <FrameLayout
            android:id="@+id/fragment_container3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/down_right_area"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="#cc6600" >

        <FrameLayout
            android:id="@+id/fragment_container4"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>
</LinearLayout>

1 个答案:

答案 0 :(得分:0)

您根本不需要使用FragmentTransactions。如果您希望将每个屏幕的4个'可切换'屏幕设为Fragment,请查看FragmentPagerAdapter

您想要的主要内容是从XML获取ViewPager

mPager = (ViewPager)findViewById(R.id.pager);

然后,您希望通过扩展FragmentPagerAdapter并定义片段的构造来创建自定义FragmentPagerAdapter

public static class MyAdapter extends FragmentPagerAdapter {
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return NUM_ITEMS; // In this case, 4
    }

    @Override
    public Fragment getItem(int position) {
        // This is basically just making a new Fragment
        // e.g. if (position == 0) return new FirstPageFragment()
        return ArrayListFragment.newInstance(position);
    }
}

然后制作适配器:

mAdapter = new MyAdapter(getSupportFragmentManager());

然后在ViewPager

上设置适配器

mPager.setAdapter(mAdapter);

有一个很多的陷阱。例如,ViewPager处理片段标记的设置,因此您必须非常小心使用Activity娱乐(有关此问题的讨论,请参阅ViewPager and fragments — what's the right way to store fragment's state?)。

您还需要考虑很多事情。如果它们在屏幕外,你想保留片段吗?如果你只想要一些呢?查看FragmentStatePagerAdapterViewPager.setOffscreenLimit