Single choice recyclerView
When we want to Multiple choice in RecyclerView, we will need these things:
– String []
– Adapter with itemClickListener
– Activity or fragment
– activity_main (recyclerView)
– list_item (TextView, CheckBox)
We use notifydatasetchanged(), it’s very important than We understand this method.
You can check the full code in GitHub.
Our views activity_main.xml (recyclerView):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.thedeveloperworldisyours.fullrecycleview.single.SingleFragment"> <android.support.v7.widget.RecyclerView android:id="@+id/single_fragment_recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> </RelativeLayout>
and list_item.xml (TextView, CheckBox)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/single_list_item_text" android:layout_width="match_parent" android:layout_height="90dp" android:text="@string/app_name" android:typeface="monospace" android:layout_toLeftOf="@+id/single_list_item_check_button" android:gravity="center" android:textSize="@dimen/multiple_list_item_size_rock_stars"/> <RadioButton android:id="@+id/single_list_item_check_button" android:layout_width="wrap_content" android:layout_height="90dp" android:layout_alignParentRight="true" android:checked="false" android:clickable="false" android:focusable="false" /> </RelativeLayout>
Adapter with ClickListener
public class SingleRecyclerViewAdapter extends RecyclerView.Adapter<SingleRecyclerViewAdapter.DataObjectHolder> { private String[] mData; private static SingleClickListener sClickListener; private static int sSelected = -1; public SingleRecyclerViewAdapter(String[] mData) { this.mData = mData; } static class DataObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView mTextView; RadioButton mRadioButton; public DataObjectHolder(View itemView) { super(itemView); this.mTextView = (TextView) itemView.findViewById(R.id.single_list_item_text); this.mRadioButton = (RadioButton) itemView.findViewById(R.id.single_list_item_check_button); itemView.setOnClickListener(this); } @Override public void onClick(View view) { sSelected = getAdapterPosition(); sClickListener.onItemClickListener(getAdapterPosition(), view); } } public void selectedItem() { notifyDataSetChanged(); } void setOnItemClickListener(SingleClickListener clickListener) { sClickListener = clickListener; } @Override public DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.single_list_item, parent, false); DataObjectHolder dataObjectHolder = new DataObjectHolder(view); return dataObjectHolder; } @Override public void onBindViewHolder(DataObjectHolder holder, int position) { holder.mTextView.setText(mData[position]); if (sSelected == position) { holder.mRadioButton.setChecked(true); } else { holder.mRadioButton.setChecked(false); } } @Override public int getItemCount() { return mData.length; } interface SingleClickListener { void onItemClickListener(int position, View view); } }
Activity or fragment
public class SingleFragment extends Fragment implements SingleRecyclerViewAdapter.SingleClickListener { SingleRecyclerViewAdapter mAdapter; public SingleFragment() { // Required empty public constructor } public static SingleFragment newInstance() { return new SingleFragment(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.single_fragment, container, false); RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.single_fragment_recycler_view); String[] list = new String[]{"Jimi Hendrix", "David Bowie", "Jim Morrison", "Elvis Presley", "Mick Jagger", "Kurt Cobain", "Bob Dylan", "John Lennon", "Freddie Mercury", "Elton John", "Eric Clapton"}; mAdapter = new SingleRecyclerViewAdapter(list); recyclerView.setAdapter(mAdapter); recyclerView.setHasFixedSize(true); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); RecyclerView.ItemDecoration itemDecoration = new DividerVerticalItemDecoration(getActivity()); recyclerView.addItemDecoration(itemDecoration); recyclerView.setLayoutManager(layoutManager); mAdapter.setOnItemClickListener(this); return view; } @Override public void onItemClickListener(int position, View view) { mAdapter.selectedItem(); } }