0

I have a ViewPager, and there's a button when clicked, deletes the current fragment from the PagerAdapter, and prevents the user from swiping there. I researched and found this Remove Fragment Page from ViewPager in Android to be the closest to what I want.

In my fragment to be deleted:

       @Override
        public void onClick(View v) {
            db.delete(count); //SqliteDatabase deletion
            displayActivity.removeCurrentFragment(0);
        }

My PagerAdapter
    public class PagerAdapter extends FragmentPagerAdapter {

long baseId = 0;
public static List<Fragment> fragmentArrayList = new ArrayList<Fragment>();

public PagerAdapter(FragmentManager fm){
    super(fm);
    fragmentArrayList.add(new FragmentOne());
    fragmentArrayList.add(new FragmentTwo());
    fragmentArrayList.add(new FragmentThree());
}
@Override
public Fragment getItem(int position) {
    return fragmentArrayList.get(position);
    }

}

@Override
public int getCount() {
    return fragmentArrayList.size();
}

@Override
public int getItemPosition(Object object){
    return PagerAdapter.POSITION_NONE;
}
@Override
public long getItemId(int position) {
    // give an ID different from position when position has been changed
    return baseId + position;
}

}

This is the activity (DisplayActivity) that hosts the pagerAdapter

public class DisplayActivity extends AppCompatActivity {

ViewPager viewPager;
PagerAdapter pagerAdapter;



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

    viewPager = (ViewPager) findViewById(R.id.pager);

    PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(pagerAdapter);

}

public void removeCurrentFragment(int position){
    pagerAdapter.fragmentArrayList.remove(position);
    pagerAdapter.notifyDataSetChanged();
}

What did I do wrong here?

I'm getting an error of

 .removeCurrentFragment(int)' on a null object reference

So this error suggests that my method call removeCurrentFragment is referencing a null object, how do I fix it?

Community
  • 1
  • 1
Jasmine Rain
  • 419
  • 2
  • 6
  • 17

2 Answers2

0

You have used

    PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());

so you are creating a new local variable instead of using your global variable. Instead change your line as

     pagerAdapter = new PagerAdapter(getSupportFragmentManager());

It should work.

Ragesh Ramesh
  • 3,470
  • 2
  • 14
  • 20
0

Your onCreate method should look like this.

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

    viewPager = (ViewPager) findViewById(R.id.pager);

    pagerAdapter = new PagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(pagerAdapter);

}
misman
  • 1,347
  • 3
  • 21
  • 39