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
- RecyclerView 条目单选----单选时改变文本的背景框形状(seletor)
- 解决使用seletor点击改变背景时事件被上层布局获取的问题
- 改变ListView的item条目按下瞬间的背景
- JavaScript 点击单选按钮改变输入框(文本域)的内容
- 改变形状的对话框
- 改变形状的对话框
- Android中Recyclerview使用9----Recyclerview的条目复用,出现CheckBox或者设置背景混乱问题
- RecyclerView的条目监听事件
- recyclerview的点击条目删除
- Recyclerview的条目点击事件
- 点击RecyclerView的条目跳转
- RecyclerView的多条目展示
- 使用listview,item的按钮点击改变按钮背景,点击其他条目按钮还原
- recycleview条目的背景选择器
- 选择条目的背景,metal
- RecyclerView单选框删除条目,全选删除,Recyclerview 实现多选,单选,全选,反选,批量删除的步骤 1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算
- 改变按钮控件的背景及文本颜色
- VC改变控件的背景颜色 字体 文本颜色
- JMeter学习-017-java.net.SocketException: Permission denied: connect 解决方案
- stm32 usb lib v2.2.0 越界bug解决办法
- 性能测试TPS目标值确定-二八原则
- js中关于function两种声明的区别——预解析
- 如何利用新媒体做SEO推广?
- RecyclerView 条目单选----单选时改变文本的背景框形状(seletor)
- 网站图标制作
- nginx下开启gzip和chunked
- [生成函数][NTT][多项式求逆]BZOJ 3456: 城市规划
- 卡方检验概述
- Nginx,Apache安装配置
- BZOJ1081 超级格雷码 [找规律]
- mongodb初步学习(一)
- 应用内存优化之OnLowMemory&OnTrimMemory