RecyclerView 条目单选----单选时改变文本的背景框形状(seletor)

来源:互联网 发布:星桥数据 编辑:程序博客网 时间:2024/05/20 08:23
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>


命名随便写的,只是为了测试下功能.








 
阅读全文
0 0
原创粉丝点击