package com.ontime.singlechoice; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RadioButton; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class SingleChoiceRecyclerViewActivity extends AppCompatActivity { public interface OnItemClickListener { void onItemClick(View view, int position, long id); } public class InternalViewHolder extends RecyclerView.ViewHolder { public TextView textView; public InternalViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.tv_title); } } private class SingleChoiceAdapter extends RecyclerView.Adapter<InternalViewHolder> { private final LayoutInflater layoutInflater; private List<String> data; private int currentCheckedItemPosition; private OnItemClickListener onItemClickListener; public SingleChoiceAdapter(Context context, List<String> data) { layoutInflater = LayoutInflater.from(context); this.data = data; currentCheckedItemPosition = 0; } public String getItem(int position) { return data.get(position); } @Override public InternalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new InternalViewHolder(layoutInflater.inflate(R.layout.item_single_choice, parent, false)); } @Override public void onBindViewHolder(InternalViewHolder holder, final int position) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onItemClick(v, position, getItemId(position)); } } }); if (currentCheckedItemPosition == position) { holder.textView.setBackground(SingleChoiceRecyclerViewActivity.this.getDrawable(R.drawable.color_selector_selected)); } else { holder.textView.setBackground(SingleChoiceRecyclerViewActivity.this.getDrawable(R.drawable.color_selector_normal)); } holder.textView.setText(getItem(position)); } @Override public long getItemId(int position) { return position; } @Override public int getItemCount() { return data.size(); } public void setDefaultCheckedItemPosition(int position) { currentCheckedItemPosition = position; } public int getCheckedItemPosition() { return currentCheckedItemPosition; } public void check(int position) { setDefaultCheckedItemPosition(position); notifyDataSetChanged(); } public void setOnItemClickListener(@NonNull OnItemClickListener listener) { onItemClickListener = listener; } } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recycler_view); final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); final List<String> data = new ArrayList<>(); for (int j = 0; j < 15; j++) { data.add("I am Text " + (j + 1)); } final SingleChoiceAdapter adapter = new SingleChoiceAdapter(this, data); // 默认选中第一个item adapter.setDefaultCheckedItemPosition(0); // 这个方法不能忘,指定显示布局 recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 添加分隔线,DividerItemDecoration这个类是系统提供的,在support包中 recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); recyclerView.setAdapter(adapter); adapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position, long id) { adapter.check(position); } }); } }<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="100dp" android:descendantFocusability="blocksDescendants" android:gravity="center_horizontal" android:orientation="horizontal" > <TextView android:id="@+id/tv_title" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/color_selector" android:contextClickable="true" android:gravity="center" tools:text="aa" /> </LinearLayout><?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /><?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/color_selector_selected"/> <item android:state_focused="true" android:drawable="@drawable/color_selector_selected"/> <item android:state_pressed="true" android:drawable="@drawable/color_selector_selected"/> <item android:state_selected="false" android:drawable="@drawable/color_selector_normal"/> <item android:state_focused="false" android:drawable="@drawable/color_selector_normal"/> <item android:state_pressed="false" android:drawable="@drawable/color_selector_normal"/> </selector><?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <stroke android:color="#000" android:width="1dp"/> <size android:width="50px" android:height="50px" /> </shape><?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <stroke android:color="#000" android:width="1dp"/> <corners android:bottomLeftRadius="24px" android:bottomRightRadius="24px" android:topLeftRadius="22px" android:topRightRadius="22px" /> <size android:width="80px" android:height="44px" /> </shape>
命名随便写的,只是为了测试下功能.
RecyclerView 条目单选----单选时改变文本的背景框形状(seletor)
最新推荐文章于 2023-04-02 10:12:22 发布