you need to use List because of the dynamic deletion of objects. you need
@Override public int getItemPosition(Object object){ return PagerAdapter.POSITION_NONE; }
to force the adapter to create a new page every time and not use it on memory pages.
public class ViewPagerAdapter extends PagerAdapter { // Declare Variables Context context; List<String> rank; List<String> country; List<String> population; List<Integer> flag = new ArrayList<Integer>(); LayoutInflater inflater; public ViewPagerAdapter(Context context, String[] rank, String[] country, String[] population, int[] flag) { this.context = context; this.rank = new ArrayList<String>(Arrays.asList(rank)); this.country = new ArrayList<String>(Arrays.asList(country)); this.population = new ArrayList<String>(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; } }
source share