ListView实现颜色变化的单选效果
来源:互联网 发布:淘宝产品拍摄相机选择 编辑:程序博客网 时间:2024/05/29 16:30
有的时候我们需要点击ListView的时候有一种单选的效果,例如:
这个功能既简单又实用,我把它记录在博客中,供自己和大家学习!
布局文件
布局很简单,就是普通ListView和item的布局:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><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.sunao.yuandemo.MainActivity"> <ListView android:id="@+id/lv_radio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:dividerHeight="5dp" /></RelativeLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_item" android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center"/></LinearLayout>
逻辑代码
适配器
首先看一下ListView的适配器,就是个简单的继承了BaseAdapter的适配器,我们实现单选效果,主要是给适配器设置一个变量-position,然后为变量提供set方法,供对应的Activity使用,下面是适配器的代码:
RadioListViewAdapter.java
/** * Created by yuankundong on 2016/02/28. */public class RadioListViewAdapter extends BaseAdapter{ private Context context; private LayoutInflater inflater; private List<String> itemList = new ArrayList<String>(); private int position = 0;//用于记录当前位置 public RadioListViewAdapter(Context context){ this.context = context; inflater = LayoutInflater.from(context); } /* * 用于设置当前位置 */ public void setPosition(int position) { this.position = position; } public void setItems(List<String> itemList) { this.itemList.clear(); this.itemList = itemList; notifyDataSetChanged(); } @Override public int getCount() { return itemList.size(); } @Override public Object getItem(int position) { return itemList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int i, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.item, parent, false); holder.tvItem = (TextView) convertView.findViewById(R.id.tv_item); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tvItem.setText(itemList.get(i)); if (position == i) { holder.tvItem.setTextColor(context.getResources().getColor(R.color.txt_white)); holder.tvItem.setBackgroundColor(context.getResources().getColor(R.color.bg_blue)); } else { holder.tvItem.setTextColor(context.getResources().getColor(R.color.txt_black)); holder.tvItem.setBackgroundColor(context.getResources().getColor(R.color.bg_white)); } return convertView; } class ViewHolder { TextView tvItem; }}
以上代码比较简单,就是判断当我们定义的变量position如果和geiView方法中的i一样的话,就代表选中的是这条,就把颜色设置成和其他不一样的。
MainActivity.java
在主Activity中,主要操作就是添加数据源,设置点击事件。
public class MainActivity extends AppCompatActivity { private ListView listView; private RadioListViewAdapter radioListViewAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化listView控件 listView = (ListView) findViewById(R.id.lv_radio); //实例化适配器,设置适配器 radioListViewAdapter = new RadioListViewAdapter(this); listView.setAdapter(radioListViewAdapter); //数据源 List<String> data = new ArrayList<>(); for (int i = 0; i < 10; i++) { data.add("当前是" + i); } //设置数据 radioListViewAdapter.setItems(data); //设置点击事件 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //调用适配器中的setposition方法,把点击的positon传过去 radioListViewAdapter.setPosition(position); //刷新适配器 radioListViewAdapter.notifyDataSetChanged(); } }); }}
这样,我们就完成了文章一开始的效果,上面代码中主要的一个步骤就是在点击ListView的某一行时需要把点击位置传到适配器中,然后刷新适配器。
下载点这里
1 0
- ListView实现颜色变化的单选效果
- CheckedTextView实现ListView的单选效果
- 实现listview单选效果
- 实现单选的字体变色效果的listview
- ListView单选效果(最简单的实现方式)
- ListView和GridView实现单选效果
- Android ListView 实现Item单选效果
- 用CheckBox实现ListView单选效果
- ListView和GridView实现单选效果
- listview或者gridview 实现单选效果
- ListView+CheckBox实现单选效果
- GridView或者Listview实现单选效果
- ListView 单选效果
- 去掉系统ListView的一些颜色变化
- listview、GridView单点击效果,点击改变背景改变item字体颜色实现
- ListView + CheckBox实现单选、多选效果
- 字体颜色变化效果
- ListView利用CheckedTextViewr实现条目单选效果
- Git初体验之远程仓库
- 112. Path Sum
- Qt小软件:LanFileSender(局域网文件传输小工具)
- android对启动模式的深入了解
- 基于Bundle的消息传递
- ListView实现颜色变化的单选效果
- [BLE]低功耗蓝牙介绍
- 如何在folat left的时候让子div撑开父div
- 安卓通知的使用系列1:土司(Toast)通知和自定义土司(Toast)通知
- iOS UITableView简介 —— HERO博客
- p6spy2.x配置为slf4j-log4j输出日志同时到控制台和文件
- 225. Implement Stack using Queues
- 禁止UIScrollView垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- spring ioc 原理小解