سؤال

I've tried to implement PagerSlidingTabStrip to my app but it just isn't working. I did everything that is done in the sample but it isn't working. The tab indicator just isn't moving as it is supposed to and the app isn't crashing. Basically nothing is happening. I have no idea what is wrong.

MainActivity code

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>

Does anyone have any idea why my code is not working?

هل كانت مفيدة؟

المحلول 2

I found where the problem was lying after I took a deeper look at the sample code. The problem was the fact that I still had the previous ActionBar tabs left in the code and those were overlapping the PagerSlidingTabStrip tabs so that I didn't see them.

All I had to do was to remove every reference to ActionBar tabs and it worked!

نصائح أخرى

I think you didn't locate ViewPager even if it's RelativeLayout.

so try this code that i'm using. I hope it will be helpful for you.

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top