2012-12-24 101 views
4

我想使用ActionBar选项卡和ViewPager来实现在选项卡之间滑动。我已经成功地使用这里的例子:与ViewPager和框架布局的ActionBar选项卡

http://developer.android.com/reference/android/support/v4/view/ViewPager.html

不过,我也想在XML中添加ViewPager之外的帧结构:

<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和框架布局布局,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内的标签而已。尽管我的框架布局工作得很好。我如何让ViewPager使用它?

+0

可能与bug无关,但是: 1.为什么要为FrameLayout添加片段名称(ButtonFragment)? 2.最好首先检查savedInstanceState!= null,然后才能搜索视图。 – vovkab

+0

我实际上是使用FrameLayout在按钮单击时在两个片段之间切换,并且我将其格式化为这种方式,因为我被告知这是做这件事的正确方法,但我会尝试另一种方式。 – vabanagas

+0

“ViewPager中没有别的东西”是什么意思? FragmentLayout是否占用全部空间或者是未创建的碎片? –

回答

1

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

ViewPager已经在您的布局上。

应该做点像 mViewPager =(ViewPager)findViewById(R.id.FrameLayout1);

从示例代码中,他们正在创建运行时控件,而您将它们放在xml中。

相关问题