listview 选中高亮显示实现方法

人人客户端有一个很好的导航栏,如下图所示,当点击左侧ListView后,选中的一行就会一直呈高亮状态显示,图中选中行字的颜色显示为蓝色(注意:是选中行后一直高亮,而不是只是点击时高亮),如果再次点击另外的一行, 则新的那一行就高亮,下面就来实现这个高亮效果的显示;
 
刚开始实现的时候,我打算使用ListView的 getChildAt(int
pos)方法来实现,结果发现非常的cao蛋,因为ListView本身的原因,当你View
view=listView.getChildAt(pos),并且改变这个View的状态时,你会发现,高亮的往往不是你
选中的那行,反而是其他行,这是由于ListView本身决定了,Google在设计ListView的时候,为了减少内存的消耗,使 用了一种共用的方式,即多个行共用一个View,所以才会出现点击后乱跳的现象(这是一种很高明的方法,不过也苦了程序猿们);
于是就选择了另外一种方式,ListView都有一个Adapter来显示数据,而这个Adapter中的getView()却能获得准确的每一行,这里我们需要自定义一个继承自BaseAdapter的Adapter来实现(如果使用ArrayAdapter等自带的Adapter时,不会实现这样的功能);另外,这个ListView一定要设置一个属性:listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
即设置为单选模式,这样当你点击一行后,ListView就会刷新界面,还有就是给ListView设置OnItemClickListener监听器, 当点击一行后,就更新当前行的下标,所有代码如下所示:


代码如下:

public class ListViewDemo extends Activity {
private ListView listview;
private int cur_pos = 0;// 当前显示的一行
private String[] items_text = { "选项一", "选项二", "选项三", "选项四", "选项五" };
private int[] items_img = { R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_demo);
listview = (ListView) findViewById(R.id.listview);
final MyAdapter adapter = new MyAdapter(this);
listview.setAdapter(adapter);
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// 一定要设置这个属性,否则ListView不会刷新
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
cur_pos = position;// 更新当前行
}
});
}
private class MyAdapter extends BaseAdapter {
private LayoutInflater inflater;
public MyAdapter(Context context) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items_text.length;
}
@Override
public Object getItem(int position) {
return items_text[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.e("TEST", "refresh once");
convertView = inflater.inflate(R.layout.list_child, null, false);
ImageView img = (ImageView) convertView
.findViewById(R.id.list_child_img);// 用于显示图片
TextView tv = (TextView) convertView
.findViewById(R.id.list_child_text);// 显示文字
tv.setText(items_text[position]);
img.setImageResource(items_img[position]);
if (position == cur_pos) {// 如果当前的行就是ListView中选中的一行,就更改显示样式
convertView.setBackgroundColor(Color.LTGRAY);// 更改整行的背景色
tv.setTextColor(Color.RED);// 更改字体颜色
}
return convertView;
}
}
}
public class ListViewDemo extends Activity {
private ListView listview;
private int cur_pos = 0;// 当前显示的一行
private String[] items_text = { "选项一", "选项二", "选项三", "选项四", "选项五" };
private int[] items_img = { R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_demo);
listview = (ListView) findViewById(R.id.listview);
final MyAdapter adapter = new MyAdapter(this);
listview.setAdapter(adapter);
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// 一定要设置这个属性,否则ListView不会刷新
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long id) {
cur_pos = position;// 更新当前行
}
});
}
private class MyAdapter extends BaseAdapter {
private LayoutInflater inflater;
public MyAdapter(Context context) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items_text.length;
}
@Override
public Object getItem(int position) {
return items_text[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.e("TEST", "refresh once");
convertView = inflater.inflate(R.layout.list_child, null, false);
ImageView img = (ImageView) convertView
.findViewById(R.id.list_child_img);// 用于显示图片
TextView tv = (TextView) convertView
.findViewById(R.id.list_child_text);// 显示文字
tv.setText(items_text[position]);
img.setImageResource(items_img[position]);
if (position == cur_pos) {// 如果当前的行就是ListView中选中的一行,就更改显示样式
convertView.setBackgroundColor(Color.LTGRAY);// 更改整行的背景色
tv.setTextColor(Color.RED);// 更改字体颜色
}
return convertView;
}
}
}

(0)

相关推荐

  • android listview优化几种写法详细介绍

    这篇文章只是总结下getView里面优化视图的几种写法,就像孔乙己写茴香豆的茴字的几种写法一样,高手勿喷,勿笑,只是拿出来分享,有错误的地方欢迎大家指正,谢谢. listview Aviewthatshowsitemsinaverticallyscrollinglist. 一个显示一个垂直的滚动子项的列表视图在android开发中,使用listview的地方很多,用它来展现数据,成一个垂直的视图.使用listview是一个标准的适配器模式,用数据--,界面--xml以及适配器--adapter,

  • Android ListView构建支持单选和多选的投票项目

    引言 我们在android的APP开发中有时候会碰到提供一个选项列表供用户选择的需求,如在投票类型的项目中,我们提供一些主题给用户选择,每个主题有若干选项,用户对这些主题的选项进行选择,然后提交. 本文以一个支持单选和多选投票项目为例,演示了在一个ListView中如何构建CheckBox列表和RadioButton列表,并分析了实现的原理和思路,提供有需要的朋友参考. 项目的演示效果如下. 数据源 通常我们的数据源来自于数据库.首先,我们构建投票项目类SubjectItem. /** * 主题

  • Android ListView 默认选中某一项实现代码

    这里是使用 TOC 生成的目录: •Layout文件定义 ◦ListView定义 ◦item 模板定义 •代码 ◦初始化列表 ◦用户点击处理 •效果 -------------------------------------------------------------------------------- 要使用 ListView 实现一个充值方式选择,默认想选中第二项,搞了一下午,终于搞定了.原本就没怎么用 Java 写过 Android 应用,又隔了好久没写,一切都生疏了,半吊子变成大呆

  • 详谈Android ListView的选择模式

    效果图: ListView 定义了choiceMode属性,描述是这样的: 用于为视图定义选择行为.默认情况下,列表时没有任何选择行为的.如果把choiceMode设置为singleChoice,列表允许有一个列表项处于被选状态.如果把choiceMode设置为multipleChoice,那么列表允许有任意数量的列表项处于被选状态 ListView以某种方式通过Checkable接口处理视图的选择状态,LIstView源码中有这么一段: if (mChoiceMode != CHOICE_MO

  • Android ListView优化之提高android应用效率

    ListView是一个经常用到的控件,ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件.Adapter是listview和数据源间的中间人. 当每条数据进入可见区域时,adapter的getview()会被调用,返回代表具体数据的视图.触摸滚动时,频繁调用.支持成百上千条数据. 下面为显示每条数据的xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  • listview 选中高亮显示实现方法

    人人客户端有一个很好的导航栏,如下图所示,当点击左侧ListView后,选中的一行就会一直呈高亮状态显示,图中选中行字的颜色显示为蓝色(注意:是选中行后一直高亮,而不是只是点击时高亮),如果再次点击另外的一行, 则新的那一行就高亮,下面就来实现这个高亮效果的显示:  刚开始实现的时候,我打算使用ListView的 getChildAt(int pos)方法来实现,结果发现非常的cao蛋,因为ListView本身的原因,当你View view=listView.getChildAt(pos),并且

  • javascript实现table选中的行以指定颜色高亮显示的方法

    本文实例讲述了javascript实现table选中的行以指定颜色高亮显示的方法.分享给大家供大家参考.具体实现方法如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>table选中的行以指

  • C#实现ListView选中项向上或向下移动的方法

    本文实例讲述了C#实现ListView选中项向上或向下移动的方法.分享给大家供大家参考.具体实现方法如下: private void buttonUp_Click(object sender, EventArgs e) { if (listView.SelectedItems.Count > 0 && listView.SelectedItems[0].Index != 0) { listView.BeginUpdate(); foreach (ListViewItem lvi in

  • JavaScript获取文本框内选中文本的方法

    本文实例讲述了JavaScript获取文本框内选中文本的方法.分享给大家供大家参考.具体分析如下: 这里的代码可以用来获取用户通过鼠标在文本输入框或者textarea里选择的选本. 需要注意ie的问题. 代码如下: 复制代码 代码如下: <script type="text/javascript"> function getFieldSelection(select_field) {     word='';     if (document.selection) {   

  • jquery实现页面关键词高亮显示的方法

    本文实例讲述了jquery实现页面关键词高亮显示的方法.分享给大家供大家参考.具体分析如下: 通过jquery对页面搜索关键词进行高亮显示 支持中文多词页面中高亮显示 1. JavaScript代码如下: 复制代码 代码如下: jQuery.fn.extend({     highlight: function(search, configs){         if(typeof(search) == 'undefined') return;         var configs =  jQ

  • 后台获取ZTREE选中节点的方法

    本文实例讲述了后台获取ZTREE选中节点的方法.分享给大家供大家参考.具体实现方法如下: function count() { var zTree = $.fn.zTree.getZTreeObj("classpurview"); checkCount = zTree.getCheckedNodes(true); var classpurview = ""; for(var i=0;i<checkCount.length;i++) { classpurview

  • Android实现带有边框的ListView和item的方法

    本文实例讲述了Android实现带有边框的ListView和item的方法.分享给大家供大家参考,具体如下: 想为ListView和item四周添加边框有两种方法: 1.贴一张带有边框效果的背景图 2.自定义Draw的方法 第一种方法较第二种方法更耗系统资源,但是用法简单,只需要一张图设置为相应控件的背景即可,而第二种灵活性好些. 这次是实现带有边框的ListView和item,为此写个简单Demo 学习学习 先看下Demo运行效果吧 下面是主要代码,主要是用到Canvas.drawLine(.

  • js实现鼠标点击文本框自动选中内容的方法

    本文实例讲述了js实现鼠标点击文本框自动选中内容的方法.分享给大家供大家参考.具体如下: 这里使用JS实现鼠标点击时自动选中文本框文本的效果,相信许多朋友都遇到这种功能的,就是当我们点击文本框的时候,文本框中默认的文字会被全部选中,这样当你输入的时候不用再去选择,省去了一些麻烦,提高了输入效率,用户肯定会喜欢这功能,那么实现的方法是怎么样呢?通过本代码你就搞明白了. 先来看看运行效果截图: 在线演示地址如下: http://demo.jb51.net/js/2015/js-mouse-click

  • JavaScript检测并限制复选框选中个数的方法

    本文实例讲述了JavaScript检测并限制复选框选中个数的方法.分享给大家供大家参考.具体如下: 这里用JavaScript判断复选框中否选中,同时可以限制复选框的选中个数,这是一个比较实用的JS表单判断示例,复选框的是否选中曾经让很多人纳闷,现在好了,这段代码帮你解决了难题. 运行效果截图如下: 具体代码如下: <html> <head> <title>判断复选框中否选中</title> <script> var check_num = 0;

  • jQuery select自动选中功能实现方法分析

    本文实例分析了jQuery select自动选中功能实现方法.分享给大家供大家参考,具体如下: //筛选 var typeid = "<!--{$typeid}-->"; var bigclassid = "<!--{$bigclassid}-->"; var smallclassid = "<!--{$smallclassid}-->"; $("#typeid option[value="

随机推荐