Android viewpager 做一个左右无限翻页

public class MyViewPagerAdapter extends PagerAdapter {
 
    private List<LocalMusic> list;
    private Context mContext;

    public MyViewPagerAdapter(List<LocalMusic> list, Context mContext) {
        this.list = list;
        this.mContext = mContext;
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public Object instantiateItem(ViewGroup container, final int position) {
        View inflate = LayoutInflater.from(container.getContext()).inflate(R.layout.layout_main_music_control, container, false);
        final LayoutMainMusicControlBinding layoutMainMusicControlBinding = DataBindingUtil.bind(inflate);

        final LocalMusic localMusic = list.get(position % list.size());

        layoutMainMusicControlBinding.imageBottomControlItem.setImageDrawable(mContext.getDrawable(getImageResIdFromSinger(localMusic.getSongAuthor())));
        layoutMainMusicControlBinding.tvSinger.setText(localMusic.getSongAuthor());
        layoutMainMusicControlBinding.tvSongname.setText(localMusic.getName());

        container.addView(inflate);

        inflate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(myonClicklistener!=null){
                    myonClicklistener.onclick(layoutMainMusicControlBinding.imageBottomControlItem,position% list.size());
                }
            }
        });

        return inflate;
    }
 
    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }
 
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
 
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(((View) object));
    }


    /**
     * 从课程名得到此时图片id
     */
    private int getImageResIdFromSinger(String strClassName) {
        int resid = 0;
        if (strClassName.equals("智慧词条")) {
            resid = R.drawable.class_zhihuicitiao;
        } else if (strClassName.equals("梅花易数")) {
            resid = R.drawable.class_meihua;
        } else if (strClassName.equals("玄空风水")) {
            resid = R.drawable.class_fengshui;
        } else if (strClassName.equals("阴阳")) {
            resid = R.drawable.class_yinyang;
        } else if (strClassName.equals("五行")) {
            resid = R.drawable.class_wuxing;
        } else if (strClassName.equals("八卦")) {
            resid = R.drawable.class_bagua;
        } else if (strClassName.equals("天干")) {
            resid = R.drawable.class_tiangan;
        } else if (strClassName.equals("地支")) {
            resid = R.drawable.class_dizhi;
        } else if (strClassName.equals("姓名学")) {
            resid = R.drawable.class_xingmingxue;
        } else if (strClassName.equals("罗盘应用")) {
            resid = R.drawable.class_luopan;
        } else if (strClassName.equals("风俗禁忌")) {
            resid = R.drawable.class_fengsu;
        } else if (strClassName.equals("测字精讲")) {
            resid = R.drawable.class_cezi;
        }
        return resid;
    }

    private myonClicklistener myonClicklistener;
    public interface myonClicklistener{
        void onclick(View view,int positon);
    }
    public void setMyonClicklistener(MyViewPagerAdapter.myonClicklistener myonClicklistener) {
        this.myonClicklistener = myonClicklistener;
    }

//    private int mChildCount = 0;
//    @Override
//    public void notifyDataSetChanged() {
//
//        mChildCount = getCount();
//        super.notifyDataSetChanged();
//    }
//    @Override
//    public int getItemPosition(Object object)   {
//        if ( mChildCount > 0) {
//            mChildCount --;
//            return POSITION_NONE;
//        }
//        return super.getItemPosition(object);
//    }
}

项目中的一部分,最底下那个注了的代码,可以有效提高notifydatachange的,but 非常耗费,

返回Inter.maxvue

向右翻页OK.向左的话,可以设置setCurrentItem  让他(position+list.size)  或(list.size*10)这种的,因为instantiateItem这个方法中取了膜所以可以.

猜你喜欢

转载自blog.csdn.net/FlyPig_Vip/article/details/83113773
今日推荐