如何从viewpager和pageradapter中删除项目

我正在使用pageradapter和viewpager来显示imageview数组,textview数组。但是如何在按钮点击时删除寻呼机。下面的代码中的代码,但是我在xml onclick中添加了按钮应该删除页面。

http://www.androidbegin.com/tutorial/android-viewpager-gallery-images-and-texts-tutorial/

package com.androidbegin.viewpagertutorial; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; public class ViewPagerAdapter extends PagerAdapter { // Declare Variables Context context; String[] rank; String[] country; String[] population; int[] flag; LayoutInflater inflater; public ViewPagerAdapter(Context context, String[] rank, String[] country, String[] population, int[] flag) { this.context = context; this.rank = rank; this.country = country; this.population = population; this.flag = flag; } @Override public int getCount() { return rank.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == ((RelativeLayout) object); } @Override public Object instantiateItem(final ViewGroup container, final int position) { // Declare Variables TextView txtrank; TextView txtcountry; TextView txtpopulation; ImageView imgflag; Button b; inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View itemView = inflater.inflate(R.layout.viewpager_item, container, false); // Locate the TextViews in viewpager_item.xml txtrank = (TextView) itemView.findViewById(R.id.rank); txtcountry = (TextView) itemView.findViewById(R.id.country); txtpopulation = (TextView) itemView.findViewById(R.id.population); b=(Button)itemView.findViewById(R.id.button1); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); // Capture position and set to the TextViews txtrank.setText(rank[position]); txtcountry.setText(country[position]); txtpopulation.setText(population[position]); // Locate the ImageView in viewpager_item.xml imgflag = (ImageView) itemView.findViewById(R.id.flag); // Capture position and set to the ImageView imgflag.setImageResource(flag[position]); // Add viewpager_item.xml to ViewPager ((ViewPager) container).addView(itemView); return itemView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // Remove viewpager_item.xml from ViewPager ((ViewPager) container).removeView((RelativeLayout) object); } } 

////////////////////

 // Locate the ViewPager in viewpager_main.xml viewPager = (ViewPager) findViewById(R.id.pager); // Pass results to ViewPagerAdapter Class adapter = new ViewPagerAdapter(MainActivity.this, rank, country, population, flag); // Binds the Adapter to the ViewPager viewPager.setAdapter(adapter); 

首先,您需要使用List因为动态删除对象。 第二,你需要

  @Override public int getItemPosition(Object object){ return PagerAdapter.POSITION_NONE; } 

强制适配器每次创建新页面而不在内存页面中使用。

  public class ViewPagerAdapter extends PagerAdapter { // Declare Variables Context context; List rank; List country; List population; List flag = new ArrayList(); LayoutInflater inflater; public ViewPagerAdapter(Context context, String[] rank, String[] country, String[] population, int[] flag) { this.context = context; this.rank = new ArrayList(Arrays.asList(rank)); this.country = new ArrayList(Arrays.asList(country)); this.population = new ArrayList(Arrays.asList(population)); for (int i : flag){ this.flag.add(i); } } @Override public int getCount() { return rank.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == ((RelativeLayout) object); } @Override public Object instantiateItem(ViewGroup container, int position) { // Declare Variables TextView txtrank; TextView txtcountry; TextView txtpopulation; ImageView imgflag; inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View itemView = inflater.inflate(R.layout.viewpager_item, container, false); // Locate the TextViews in viewpager_item.xml txtrank = (TextView) itemView.findViewById(R.id.rank); txtcountry = (TextView) itemView.findViewById(R.id.country); txtpopulation = (TextView) itemView.findViewById(R.id.population); Button b=(Button)itemView.findViewById(R.id.button1); final int delPosition = position; b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { rank.remove(delPosition); country.remove(delPosition); population.remove(delPosition); flag.remove(delPosition); notifyDataSetChanged(); } }); // Capture position and set to the TextViews txtrank.setText(rank.get(position)); txtcountry.setText(country.get(position)); txtpopulation.setText(population.get(position)); // Locate the ImageView in viewpager_item.xml imgflag = (ImageView) itemView.findViewById(R.id.flag); // Capture position and set to the ImageView imgflag.setImageResource(flag.get(position)); // Add viewpager_item.xml to ViewPager ((ViewPager) container).addView(itemView); return itemView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // Remove viewpager_item.xml from ViewPager ((ViewPager) container).removeView((RelativeLayout) object); } @Override public int getItemPosition(Object object){ return PagerAdapter.POSITION_NONE; } }