RecyclerView Adapter change selected position in List Scrolling

笑着哭i 提交于 2019-12-01 08:37:26

Try to use your model ItemData[] itemsData; to save if element is selected.

eg.

        if (itemsData[position].isFav){

                viewHolder.imgViewIcon.setImageResource(R.drawable.icon_fav);
         }else{

                viewHolder.imgViewIcon.setImageResource(R.drawable.pre_ic_ab_drawer);
         }


viewHolder.imgViewIcon.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (!itemsData[position].isFav) {
                            Toast.makeText(activity,"Selected Row : "+position,Toast.LENGTH_SHORT).show();
                            itemsData[position].isFav = true;
                            viewHolder.imgViewIcon.setImageResource(R.drawable.icon_fav);
                        } else {
                            viewHolder.imgViewIcon.setImageResource(R.drawable.pre_ic_ab_drawer);
                            itemsData[position].isFav = false;
                        }
                    }
                });
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private ItemData[] itemsData;
Activity activity;

public MyAdapter(Activity activity, ItemData[] itemsData) {
    this.activity=activity;
    this.itemsData = itemsData;
}

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
    View itemLayoutView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_layout, null);

    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {

    viewHolder.txtViewTitle.setText(itemsData[position].getTitle());
    viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl());
    viewHolder.imgViewIcon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!viewHolder.isFav) {
                Toast.makeText(activity,"Selected Row : "+position,Toast.LENGTH_SHORT).show();
                viewHolder.isFav = true;
                viewHolder.imgViewIcon.setImageResource(R.drawable.icon_fav);
            } else {
                viewHolder.imgViewIcon.setImageResource(R.drawable.pre_ic_ab_drawer);
                viewHolder.isFav = false;
            }
        }
    });


    if (viewHolder.isFav)
        viewHolder.imgViewIcon.setImageResource(R.drawable.icon_fav);
    else
        // The change 
        viewHolder.imgViewIcon.setImageResource(R.drawable.pre_ic_ab_drawer);

}

When you bind the ViewHolder you should reset the ImageView icon if it's not fav.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!