从ViewPager中删除片段

时间:2016-02-21 07:45:54

标签: android android-fragments android-viewpager

我有一个ViewPager,单击时会出现一个按钮,从PagerAdapter中删除当前片段,并阻止用户在那里滑动。我研究并发现这Remove Fragment Page from ViewPager in Android最接近我想要的。

在我要删除的片段中:

       @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;
}

}

这是托管pagerAdapter

的活动(DisplayActivity)
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();
}

我在这里做错了什么?

我收到错误

 .removeCurrentFragment(int)' on a null object reference

所以这个错误表明我的方法调用removeCurrentFragment正在引用一个null对象,我该如何修复它?

2 个答案:

答案 0 :(得分:0)

您已使用

    PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());

所以你要创建一个新的局部变量而不是使用你的全局变量。而是将您的行更改为

     pagerAdapter = new PagerAdapter(getSupportFragmentManager());

它应该有用。

答案 1 :(得分:0)

你的onCreate方法应如下所示。

@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);

}