ActionBar与ViewPager和Frame Layout的选项卡

4
我想使用ActionBar选项卡和ViewPager来实现在选项卡之间滑动。我已经成功地使用了这里的示例:http://developer.android.com/reference/android/support/v4/view/ViewPager.html。但是,我还想在xml中添加一个ViewPager之外的Frame Layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <android.support.v4.view.ViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/FrameLayout1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </android.support.v4.view.ViewPager>   

    <FrameLayout
        android:id="@+id/frame_layout"
        android:name="com.banagas.calculator.ButtonFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>

如果我将setContentView()设置为同时包含ViewPager和Frame Layout的布局,则ViewPager停止工作:
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("MainActivity", "onCreate");  
        mViewPager = new ViewPager(this);
        mViewPager.setId(R.id.FrameLayout1);
        ActionBar bar = getSupportActionBar();
        mViewPager.setOffscreenPageLimit(4);

        bar.setDisplayHomeAsUpEnabled(false);
        bar.setDisplayShowTitleEnabled(false);
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        mTabsAdapter = new TabsAdapter(this, mViewPager);

        mTabsAdapter.addTab(bar.newTab().setText("Display"), DisplayFragment.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("Y="), YFragment.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("Graph"), GraphFragment.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("Table"), TableFragment.class, null);

        if (findViewById(R.id.frame_layout) != null) 
        {
            if (savedInstanceState != null) 
            {
                return;
            }
            getSupportFragmentManager().beginTransaction().add(R.id.frame_layout, new ButtonFragment()).commit();
            Log.i("MainActivity", "add.ButtonFragment");
        }
    }

我能看到ViewPager中的选项卡,但除此之外什么也看不到。我的Frame Layout却完美地运行着。我该如何让ViewPager与它一起工作?


可能与错误无关,但是:
  1. 为什么你为FrameLayout添加了片段名称(ButtonFragment)?
  2. 最好先检查savedInstanceState != null,然后再查找视图。
- vovkab
我实际上正在使用FrameLayout在按钮点击时切换两个片段,并且我以这种方式格式化它,因为有人告诉我这是正确的做法。不过我会尝试另一种方式。 - vabanagas
“ViewPager内没有其他内容”是什么意思?FragmentLayout是否占据了所有空间,还是片段没有被创建? - Wolfram Rittmeyer
碎片根本没有被创建。选项卡已经创建,布局也没有问题。ViewPager只是无法实现碎片。 - vabanagas
1个回答

1

为什么要这样做 mViewPager = new ViewPager(this); mViewPager.setId(R.id.FrameLayout1); ?

ViewPager 已经在你的布局中了。

应该像这样做: mViewPager = (ViewPager)findViewById(R.id.FrameLayout1);

从示例代码来看,它们是在运行时创建控件,而你已经在 xml 中拥有它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接