[在Recyclerview中滚动后,未选中的项目

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

我制作了一个适配器,以显示我们必须选择它们的许多城市。但是,当我向下滚动并再次返回时,所选项目将再次被取消选择。

我尝试将sethasStableIds设置为true,但这也不起作用

public class CitiesAdapter extends RecyclerView.Adapter<CitiesAdapter.ViewHolder> {

private static final String TAG = "CitiesViewAdapter";

private List<Cities> citiesModelList;
private Context mContext;
private OnClickListner mOnNoteListner;

public CitiesAdapter(List<Cities> citiesModelList, Context mContext , OnClickListner mOnNoteListner) {
    this.citiesModelList = citiesModelList;
    this.mContext = mContext;
    this.mOnNoteListner = mOnNoteListner;
    setHasStableIds(true);
}

@NonNull
@Override
public CitiesAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cities_listitems, viewGroup , false);
    CitiesAdapter.ViewHolder holder = new CitiesAdapter.ViewHolder(view , mOnNoteListner , this);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull CitiesAdapter.ViewHolder viewHolder, int i) {
    Log.d(TAG , "onBindViewHolder: called.");

    Cities citiesmodels = citiesModelList.get(i);
    viewHolder.tvCitiesName.setText(citiesmodels.getName());
}

@Override
public int getItemCount() {
    return citiesModelList.size();
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position)
{
    return position;
}

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    TextView tvCitiesName;


    OnClickListner onClickListner;
    private CitiesAdapter citiesAdapter;

    public ViewHolder(@NonNull View itemView , OnClickListner onClickListner , CitiesAdapter citiesAdapter) {
        super(itemView);
        tvCitiesName = itemView.findViewById(R.id.tvCitiesName);
        this.onClickListner = onClickListner;
        itemView.setOnClickListener(this);
        this.citiesAdapter = citiesAdapter;
    }

    @Override
    public void onClick(View v) {
        onClickListner.onItemClick(getAdapterPosition(),citiesAdapter.getItem(getAdapterPosition()));
    }
}

public Cities getItem(int i){
    return citiesModelList.get(i);
}

public interface OnClickListner{
    void onItemClick(int position , Cities cities);
}

}

我在下面粘贴了我的适配器。任何帮助将不胜感激。谢谢[]

我制作了一个适配器,以显示我们必须选择它们的许多城市。但是,当我向下滚动并再次返回时,所选项目将再次被取消选择。我尝试设置sethasStableIds ...

android android-recyclerview recycler-adapter
3个回答
1
投票

Cities对象上,定义一个名为selected的布尔属性,并使用一种方法来确定是否通过使用诸如boolean isSelected()之类的吸气剂来选择它。然后,在适配器的onBindViewHolder方法上添加以下内容:


0
投票

发生这种情况是因为当我们滚动onBindViewHolder方法调用时。


0
投票

请使用SparseBooleanArray维护Android Recyclerview中Checkbox的状态。您可以点击此链接Using SparseBooleanArray to store Checkbox state in RecyclerView when scrolling

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