ListView 默认选中第X个高亮

harkue 2014-12-12 09:23:45
我想实现ListView默认第X个选中并高亮的效果,但是一直不成功。

如果自定义Adapter是可以的,一直在找为什么用ArrayAdapter或者SimpleAdapter就不行的原因,求分析。
初次进入不会有高亮效果,点击后会有高亮效果。


String[] data = { "北京", "上海", "广州", "深圳", "南京", "苏州", "杭州", "武汉", "天津", "西安", "厦门", "重庆", "成都" };
ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < data.length; i++)
{
HashMap<String, String> map = new HashMap<String, String>();
map.put("CityName", data[i]);
dataList.add(map);
}
final SimpleAdapter simpleAdapter = new SimpleAdapter(this, dataList, R.layout.list_item,
new String[] { "CityName" }, new int[] { R.id.item_name });

mListView.setAdapter(simpleAdapter);

mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
view.setSelected(true);

Log.d(TAG, "The item is clicked :" + position + " with name: " + ((TextView) view).getText().toString());
Log.d(TAG, "The item is selected :" + mListView.getSelectedItem());
}
});

int position = 8;
mListView.setSelection(position);
// mListView.setSelected(true);
mListView.setItemChecked(position, true);

//模拟点击第X个Item
new Handler().post(new Runnable() {

@Override
public void run()
{
int position = 8;
TextView textView = (TextView) mListView.getAdapter().getView(position, null, null);
Log.d(TAG, "The first view is :" + textView.getText().toString());

mListView.performItemClick(textView, position, mListView.getAdapter().getItemId(position));
}

});



从LogCat的日志看出:位置已经被选中,但是没有高亮效果。


10-13 04:54:46.015: D/Selector_Demo(23419): The current position is :8
10-13 04:54:46.015: D/Selector_Demo(23419): The current view is :null
10-13 04:54:46.031: D/Selector_Demo(23419): The first view is :天津
10-13 04:54:46.039: D/Selector_Demo(23419): The item is clicked :8 with name: 天津
10-13 04:54:46.039: D/Selector_Demo(23419): The item is selected :{CityName=天津}


list_item对应的效果文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@android:color/darker_gray" android:state_selected="false" android:color="@android:color/black"></item>
<item android:drawable="@android:color/white" android:state_checked="true" android:color="@android:color/holo_orange_light"></item>
<item android:drawable="@android:color/white" android:state_pressed="true" android:color="@android:color/holo_orange_light"></item>
<item android:drawable="@android:color/holo_orange_light" android:state_selected="true" android:color="@android:color/holo_orange_light"></item>

</selector>
...全文
360 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
harkue 2015-07-14
  • 打赏
  • 举报
回复
引用 4 楼 dalor 的回复:
因为它们是定义好的,效果只定义了点击时的背景变化的style.没有别的style.
需要如何进行修改?
leon7199 2015-07-14
  • 打赏
  • 举报
回复
你现在是继承Activity吧,继承ListActivity试一下 给ListView加点击监听,再执行performItemClick方法,发现ListView的Item被choose了,但是点击事件没被触发。如果是继承自ListActivity,getListView得到ListView,执行这个方法会触发点击事件。 http://blog.csdn.net/liu149339750/article/details/7817695
Arnold9009 2015-07-14
  • 打赏
  • 举报
回复
给listview指定这个属性:android:listSelector="@drawable/your_selector" 在your_selector中通过selector来指定各种情况下的style
开发者_android 2015-07-14
  • 打赏
  • 举报
回复
引用 5 楼 harkue 的回复:
[quote=引用 4 楼 dalor 的回复:] 因为它们是定义好的,效果只定义了点击时的背景变化的style.没有别的style.
需要如何进行修改?[/quote] 选中的那个item可以获得,选中后,直接设置背景就可以。
开发者_android 2014-12-25
  • 打赏
  • 举报
回复
因为它们是定义好的,效果只定义了点击时的背景变化的style.没有别的style.
_deadline 2014-12-25
  • 打赏
  • 举报
回复
mListView.setSelector(position); 没记错的话是这个
_xianfeng99 2014-12-23
  • 打赏
  • 举报
回复
一般都用继承BaseAdapter的自定义adapter,自己写的灵活,如果要拓展或有说明需求都好做,系统的没怎么用过。
harkue 2014-12-23
  • 打赏
  • 举报
回复
查看了很多资料都是显示说要自定义Adapter,在getView方法中设置背景。

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧