今天项目中遇到列表单选,因为一直对RecyclerView情有独钟,所以打算也用这个控件写,下面是具体实现
RadioButton的样式请参考我的另一个博客 自定义RadioButton样式
xml中设置比较简单, 这里就不贴上代码了。
adapter 实现如下:
import com.goucai.user.R; import com.goucai.user.recyclerview.BaseQuickAdapter; import com.goucai.user.recyclerview.BaseViewHolder; import java.util.List; public class ReasonAdapter extends BaseQuickAdapter<String> { private BaseViewHolder holder; private int selPosition=0; public ReasonAdapter(int layoutResId, List<String> data) { super(layoutResId, data); } @Override protected void convert(BaseViewHolder helper, String item, int position) { holder=helper; helper.setText(R.id.item_reason_tips,item); if (selPosition==position) { helper.setChecked(R.id.item_reason_radio_btn,true); }else { helper.setChecked(R.id.item_reason_radio_btn,false); } } public BaseViewHolder getBaseViewHolder() { return holder; } public void setItemSel(int selPosition) { this.selPosition=selPosition; notifyDataSetChanged(); } }这里我继承的BaseQuickAdapter 具体使用方式请才能考[BaseQuickAdapter](http://www.jianshu.com/p/e730462138bd?nomobile=yes) 这个adapter 中写了一个setItemSel方法,用来传如选择的item位置 然后再convert 方法中使用判断。 java代码实现只要在OnClickItemListener中调用setItemsel方法就可以了实现如下:
reasonRecyclerView.setLayoutManager(new LinearLayoutManager(this)); adapter = new ReasonAdapter(R.layout.item_cancel_reason_view, reasons); reasonRecyclerView.setAdapter(adapter); private void initEvent() { adapter.setOnRecyclerViewItemClickListener(new BaseQuickAdapter.OnRecyclerViewItemClickListener() { @Override public void onItemClick(View view, int position) { adapter.setItemSel(position); } }); }
问题一:
点击列表中的RadioButton 失效
当我们把RaidoButton和RecyclerView或者ListVIew相结合的时候, 如果点击RadioButton则就不会出发onItemListener 解决方法如下:
在XML中添加如下属性
android:clickable="false" android:focusableInTouchMode="false" android:layout_alignParentRight="true"
因为RadioButtom的优先级高于Item的优先级。
如有疑问请加群 :195109527