ViewPager 删除一个页面
ViewPager delete a page
如何从查看寻呼机中永久删除一个页面。当用户按下该屏幕上的按钮时,我想删除一个页面。我为此苦苦挣扎。我阅读了 pageradapter 的文档并找到了 destroyitem 但它对我帮助不大。我能够在 viewpager 中添加图像,但删除仍然给我带来困难。请帮忙。
下面是 activity 的代码,其中获取图像,我想根据用户请求删除图像。
public class ImageDisplayActivity extends Activity {
private List<String> filePaths;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display1);
// Get Image Paths for the PagerAdapter
filePaths = getIntent().getExtras().getStringArrayList("filePaths");
int currPosition = getIntent().getExtras().getInt("position");
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.setCurrentItem(currPosition);
ImagePagerAdapter adapter = new ImagePagerAdapter();
viewPager.setAdapter(adapter);
}
private class ImagePagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return filePaths.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((ImageView) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Context context = ImageDisplayActivity.this;
ImageView imageView = new ImageView(context);
int padding = 16;
imageView.setPadding(padding, padding, padding, padding);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
// Get Image
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = 4;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(filePaths.get(position), bmOptions);
// Display Image
imageView.setImageBitmap(bitmap);
((ViewPager) container).addView(imageView, 0);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object imageView) {
((ViewPager) container).removeView((ImageView) imageView);
}
}
}
正如@Kuffs 所说,从文件路径中删除项目,然后通知适配器底层数据已更改:
filePaths.remove(...); // Remove whatever you want
adapter.notifyDatasetChanged(); // Tell the adapter that it's time to update views
我正在发布一个答案,因为我无法发表评论。
您可以尝试将其从适配器中移除。将此添加到您的 destroyItem:
if(position == conditionToRemove){
filePaths.remove(position);
adapter.notifyDatasetChanged()
}
并且,您必须将 ImagePagerAdapter 设为全局变量。
希望这对您有所帮助!
如何从查看寻呼机中永久删除一个页面。当用户按下该屏幕上的按钮时,我想删除一个页面。我为此苦苦挣扎。我阅读了 pageradapter 的文档并找到了 destroyitem 但它对我帮助不大。我能够在 viewpager 中添加图像,但删除仍然给我带来困难。请帮忙。
下面是 activity 的代码,其中获取图像,我想根据用户请求删除图像。
public class ImageDisplayActivity extends Activity {
private List<String> filePaths;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display1);
// Get Image Paths for the PagerAdapter
filePaths = getIntent().getExtras().getStringArrayList("filePaths");
int currPosition = getIntent().getExtras().getInt("position");
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.setCurrentItem(currPosition);
ImagePagerAdapter adapter = new ImagePagerAdapter();
viewPager.setAdapter(adapter);
}
private class ImagePagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return filePaths.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((ImageView) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Context context = ImageDisplayActivity.this;
ImageView imageView = new ImageView(context);
int padding = 16;
imageView.setPadding(padding, padding, padding, padding);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
// Get Image
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = 4;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(filePaths.get(position), bmOptions);
// Display Image
imageView.setImageBitmap(bitmap);
((ViewPager) container).addView(imageView, 0);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object imageView) {
((ViewPager) container).removeView((ImageView) imageView);
}
}
}
正如@Kuffs 所说,从文件路径中删除项目,然后通知适配器底层数据已更改:
filePaths.remove(...); // Remove whatever you want
adapter.notifyDatasetChanged(); // Tell the adapter that it's time to update views
我正在发布一个答案,因为我无法发表评论。
您可以尝试将其从适配器中移除。将此添加到您的 destroyItem:
if(position == conditionToRemove){
filePaths.remove(position);
adapter.notifyDatasetChanged()
}
并且,您必须将 ImagePagerAdapter 设为全局变量。 希望这对您有所帮助!