如何从viewpager和pageradapter中删除项目

问题描述 投票:5回答:1

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

https://www.swipetips.com/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);
android android-viewpager android-pageradapter
1个回答
15
投票
首先,由于动态删除对象,因此需要使用List。秒你需要

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.