繁体   English   中英

在RecyclerView中实现单选

[英]Implementing single choice in RecyclerView

如何通过自定义在RecyclerView中实现单一选择? 我想要与ListView中“单选模式”的行为相同。

如果我了解您想要的样品,请执行以下操作:

public class SingleCheckAdapter extends RecyclerView.Adapter<SingleCheckAdapter.SingleCheckViewHolder> {

private int mSelectedItem = -1;
private List<PersonItem> mSingleCheckList;
private Context mContext;
private AdapterView.OnItemClickListener onItemClickListener;

public SingleCheckAdapter(Context context, List<PersonItem> listItems) {
    mContext = context;
    mSingleCheckList = listItems;
}

@Override
public SingleCheckViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    final View view = inflater.inflate(R.layout.item_single_check, viewGroup, false);
    return new SingleCheckViewHolder(view, this);
}

@Override
public void onBindViewHolder(SingleCheckViewHolder viewHolder, final int position) {
    PersonItem item = mSingleCheckList.get(position);
    try {
        viewHolder.setDateToView(item, position);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

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

public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
    this.onItemClickListener = onItemClickListener;
}


public void onItemHolderClick(SingleCheckViewHolder holder) {
    if (onItemClickListener != null)
        onItemClickListener.onItemClick(null, holder.itemView, holder.getAdapterPosition(), holder.getItemId());
}

class SingleCheckViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private SingleCheckAdapter mAdapter;
    private RadioButton mRadio;
    private TextView mText;

    public SingleCheckViewHolder(View itemView, final SingleCheckAdapter mAdapter) {
        super(itemView);
        this.mAdapter = mAdapter;

        mText = (TextView) itemView.findViewById(R.id.text);
        mRadio = (RadioButton) itemView.findViewById(R.id.radio);
        itemView.setOnClickListener(this);
        mRadio.setOnClickListener(this);
    }

    public void setDateToView(PersonItem item, int position) throws Exception {
        mRadio.setChecked(position == mSelectedItem);
        mText.setText(item.getPersonName());
    }

    @Override
    public void onClick(View v) {
        mSelectedItem = getAdapterPosition();
        notifyItemRangeChanged(0, mSingleCheckList.size());
        mAdapter.onItemHolderClick(SingleCheckViewHolder.this);
    }
}

}

这不是我的工作。 归功于NandagopalR for Single-Choice-RecyclerView

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM