人人客户端有一个很好的导航栏,如下图所示,当点击左侧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;
}
}
}
相关推荐
在设置完新的选中项后,可能需要调用ListView的`invalidate()`或`notifyDataSetChanged()`方法来刷新界面,确保视觉效果的更新。 5. **优化性能**: 如果ListView包含大量的数据,为了避免性能问题,可以使用...
通过以上步骤,我们就实现了ListView的选中高亮显示。需要注意的是,对于性能优化,应该避免在getView()中执行过多的计算和布局操作,合理使用ViewHolder模式可以显著提升ListView的滚动流畅度。此外,还可以结合...
综上所述,要实现ListView中选中的项高亮显示,可以通过调整控件属性、响应选中项变化事件、自定义绘制或添加动画效果等方式来完成。根据项目需求,你可以选择适合的方式来优化ListView的视觉表现,提高用户交互体验...
"ListView选中行高亮"这个话题,就是关于如何实现这个功能的技术要点。 首先,我们来理解一下ListView的基本工作原理。ListView通过Adapter(适配器)来绑定数据源,将数据转化为可显示的View,然后利用View的复用...
本篇文章将详细探讨如何实现Android ListView item的选中高亮显示。 1. **自定义Adapter** 首先,你需要创建一个自定义的Adapter来填充ListView。Adapter是连接数据源和ListView的桥梁,通过它,我们可以将数据...
下面介绍的是一种简单实现ListView选中高亮的方法。 首先,在MainActivity.java文件中,我们首先需要获取ListView控件,然后设置Adapter将数据绑定到ListView上。在这里,我们使用ArrayAdapter将字符串数组绑定到...
这个代码完美解决了vb.net中的 ListView高亮的问题. 不但可以改变默认的高亮颜色,微蓝色, 而且在ListView的焦点失去的情况下,照样高亮已经选择的行. 不仅单行,复数行的选择也没有问题.
本篇文章将深入讲解如何实现ListView在触碰模式下的选中项背景高亮效果,并提供具体的操作步骤和相关知识点。 首先,我们要了解ListView的工作原理。ListView通过Adapter来绑定数据源,每个列表项(ListView的Item...
"ListView选中多个"这个主题主要涉及到ListView的复选框选择、多选模式以及相关的事件处理。 1. **复选框选择**: 在ListView中实现多选,通常会在每个列表项中添加一个复选框。这可以通过自定义Adapter来完成,...
摘要:C#源码,控件类库,ListView,高亮显示 C#使ListView控件中的选择项高亮显示,定义一个全局变量标识,设置是否在listView1控件中显示网格线,设置listView1控件在其父容器中的停靠方式,定义listView表头信息,...
通过以上步骤,我们可以实现一个具有选中高亮和图标显示功能的ListView。这个项目对于初学者来说是一个很好的实践案例,能够帮助他们深入理解ListView的工作原理以及自定义Adapter的使用。同时,对于有经验的开发者...
在项目开发过程中,遇到了使用listView需要让选中项保持高亮状态(即选中状态保持不变),且数据是二级联动。由于item点击过后瞬间颜色就会恢复原状,视觉上感觉没有选中,此demo中通过改变选中后item的背景色实现...
默认情况下,ListView在选中某项时会自动高亮显示。你可以通过设置`android:listSelector`属性来定制选中状态下的背景颜色或图片。例如,在XML布局文件中,可以在ListView标签内添加以下代码: ```xml <ListView...
这里我们将深入探讨如何在Android中为ListView添加选中颜色标识,并提供一种实现方法。 1. **ListView的基础知识** - ListView是一种可滚动的视图容器,它可以显示一组可选中的项目列表。每个项目由一个ListView...
在安卓开发中,ListView是常用的一种控件,用于展示...总之,这个示例项目提供了关于如何在安卓应用中实现ListView选中状态保持、两级联动和图标显示的方法。开发者可以参考这些代码,根据自己的需求进行调整和扩展。
以上就是实现ListView选中效果保留的一些常见方法。实际开发中,可能会结合使用多种技术来优化用户体验。记得在处理ListView时,考虑到性能问题,避免在getView()方法中执行昂贵的操作,如网络请求或数据库查询。...
在这个方法中,我们可以通过判断position(项的位置)是否与当前选中项匹配,来决定是否设置高亮和显示图片。 2. 处理点击事件 为了响应用户的点击,我们需要在ListView上设置一个OnItemClickListener。在`...