我有一个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对象,我该如何修复它?
答案 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);
}