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):
1 2 3 4 5 6 7 8 9 10 11 12 | 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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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(); } } |