PagerSlidingTabStrip无效,但我的代码对我来说似乎没问题

时间:2014-05-13 09:13:42

标签: android pagerslidingtabstrip

我试图将PagerSlidingTabStrip实现到我的应用程序,但它只是无法正常工作。我做了所有在sample完成的事情,但它没有用。选项卡指示器没有按预期移动,应用程序没有崩溃。基本上没有任何事情发生。我不知道出了什么问题。

MainActivity代码

public class MainActivity extends FragmentActivity implements TabListener {

ActionBar aBar;
ViewPager vPager;
PagerAdapter pAdapter;
PagerSlidingTabStrip slidingTabStrip;

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

    // Action Bar
    aBar = getActionBar();
    aBar.setTitle("Beautiful Voice Recorder");
    aBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Variables    
    slidingTabStrip = (PagerSlidingTabStrip) findViewById(R.id.slidingTabs);
    vPager = (ViewPager) findViewById(R.id.pager);
    pAdapter = new PagerAdapter(getSupportFragmentManager());

    // Tabs     
    vPager.setAdapter(pAdapter);
    slidingTabStrip.setViewPager(vPager);

    aBar.addTab(aBar.newTab().setText("Record").setTabListener(this));
    aBar.addTab(aBar.newTab().setText("Library").setTabListener(this));

    vPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            LibraryFragment listViewFragment = (LibraryFragment)pAdapter.instantiateItem(vPager, 1);
            RecordFragment recordFragment = (RecordFragment)pAdapter.instantiateItem(vPager, 0);
            listViewFragment.updateComponents();
            // Pause mp if it's playing and tabs are switched just in case
            if (listViewFragment.mp.isPlaying())
            {
                listViewFragment.mp.pause();
                listViewFragment.playPause.setBackgroundResource(R.drawable.play_button_selector);
            }
            if (recordFragment.isRecording)
            {
                recordFragment.stopRecording();
            }
            aBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {

        }
    });
}

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

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    vPager.setCurrentItem(tab.getPosition());
}

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

}

}

class PagerAdapter extends FragmentPagerAdapter{

String[] pageTitles = { "Record", "Library" };  

public PagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int arg0) {
    Fragment fragment = new Fragment();
    if (arg0 == 0)
    {
        fragment = new RecordFragment();
    }
    if (arg0 == 1)
    {
        fragment = new LibraryFragment();
    }
    return fragment;
}

@Override
public int getCount() {
    return pageTitles.length;
}

@Override
public CharSequence getPageTitle(int position) {

    return pageTitles[position];
}

}

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<com.astuetz.PagerSlidingTabStrip
    android:id="@+id/slidingTabs"
    android:layout_width="match_parent"
    android:layout_height="48dip" />

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

</RelativeLayout>

有没有人知道为什么我的代码无效?

2 个答案:

答案 0 :(得分:2)

我认为你没有找到ViewPager,即使它是RelativeLayout。

所以试试我正在使用的代码。我希望它对你有所帮助。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

    <com.astuetz.PagerSlidingTabStrip
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="48dip"
            />
    <com.flitto.app.widgets.MainViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/tabs"
            tools:context=".MainTabActivity"/>
</RelativeLayout>

答案 1 :(得分:0)

在深入了解示例代码之后,我发现问题出在哪里。问题在于我仍然在代码中留下了之前的 ActionBar标签,并且这些标签与 PagerSlidingTabStrip标签重叠,因此我没有看到它们。< / p>

我所要做的就是删除对ActionBar标签的每一个引用,它都有效!