0

I am stuck in a problem with the view pager.The view pager works fine initially,the adapter calls the getItem(int pos) method and the pages get setup properly. Now the problem arises when i try to replace a page in the view pager.The pagefragment is getting replaced but showing a blank screen. I am not getting what to do next.

Tried calling `notifyDatasetChanged() but still no effect.

Heres the code`

public class BaseActivity extends FragmentActivity {
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private CharSequence mDrawerTitle;
    private CharSequence mTitle;
    private String[] mActions;

    private static final int NUM_PAGES = 2;

    private ViewPager mPager;

    private PagerAdapter mPagerAdapter;
    private FragmentManager fragmentManager;
    private FragmentTransaction fragmentTransaction;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.common_layout);
        // Instantiate a ViewPager and a PagerAdapter.
        fragmentManager = getSupportFragmentManager();
        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);

        mTitle = mDrawerTitle = getTitle();
        mActions = getResources().getStringArray(R.array.actions);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        // opens
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                GravityCompat.START);
        // set up the drawer's list view with items and pclick listener
        mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                R.layout.drawer_list_item, mActions));
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
        
    }

    // The click listener for ListView in the navigation drawer
    private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            selectItem(position);
        }
    }

    private void selectItem(int position) {
        switch (position) {
        case 0:
            replaceFragment(new DashFragment());
            break;
        case 1:
            replaceFragment(new SearchFragment());
            break;
        case 2:
            replaceFragment(new UploadFragment());
            break;
        default:
            replaceFragment(new DashFragment());
            break;
        }
        mDrawerList.setItemChecked(position, true);
        setTitle(mActions[position]);
        Toast.makeText(this, "Title is=" + getTitle(), 1).show();
        mDrawerLayout.closeDrawer(mDrawerList);

    }

    private void replaceFragment(Fragment newContentFragment) {
        // TODO Auto-generated method stub
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();
        fragmentTransaction.replace(R.id.pager, newContentFragment);
        fragmentTransaction.addToBackStack(String.valueOf(newContentFragment
                .getId()));
        fragmentTransaction.commit();
    }

    @Override
    public void onBackPressed() {
        if (mPager.getCurrentItem() == 0) {
            // If the user is currently looking at the first step, allow the
            // system to handle the
            // Back button. This calls finish() on this activity and pops the
            // back stack.
            super.onBackPressed();
        } else {
            // Otherwise, select the previous step.
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
        }
    }

    private class ScreenSlidePagerAdapter extends FragmentPagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return new DashFragment();
            case 1:
                return new SearchFragment();
            default:
                return new DashFragment();
            }
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }
        
        
    }

    
}

Here's my common_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:focusable="true"
        android:focusableInTouchMode="true" />

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:background="#111"
        android:choiceMode="singleChoice" />

</android.support.v4.widget.DrawerLayout>
Community
  • 1
  • 1
cafebabe1991
  • 4,416
  • 1
  • 25
  • 36

1 Answers1

1

Here are the solutions of your problem .These have the good explanation as well ..

first

second

keep it DRY :)

Let me know if you need further explanation.

Community
  • 1
  • 1
nitesh goel
  • 6,108
  • 2
  • 26
  • 37