我的目的是使选中的项目(从列表 View 中)突出显示。
使用下面的代码,它可以完美地工作:
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int post,
long arg3) {
int itemPosition = post;
String itemValue = (String) lst_peers
.getItemAtPosition(itemPosition);
sendMessage(itemValue + " has been selected!");
obOpponent = new Opponent(peerListID.get(itemPosition),
itemValue);
// turning off the discovery process if any
discTime = 0;
// set the item highlighted
lst_peers.setItemChecked(itemPosition, true);
arg1.setBackgroundColor(Color.YELLOW);
}
但是,我的问题是
如何使商品恢复正常状态的颜色(不突出显示),
一旦用户单击另一个项目?
我试图将循环放在onItemClick方法内,但android崩溃了!
最佳答案
答案1-最快:
尝试一些技巧:
定义一个全局View变量View TempView
并使用它存储您的View arg1
以便以后(单击鼠标右键)将其更改为原始背景:
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int post,
long arg3) {
int itemPosition = post;
String itemValue = (String) lst_peers
.getItemAtPosition(itemPosition);
sendMessage(itemValue + " has been selected!");
obOpponent = new Opponent(peerListID.get(itemPosition),
itemValue);
// turning off the discovery process if any
discTime = 0;
// set the item highlighted
lst_peers.setItemChecked(itemPosition, true);
if (!(tempView == null)) {
tempView.setBackgroundColor(YOUR_ORIGINAL_BACKGROUND);
}
tempView = arg1;
tempView.setBackgroundColor(Color.YELLOW);
}
每次单击时,将颜色更改为黄色,并且先前单击的颜色将恢复为所需的原始颜色。答案2-更好的选择器
在您的xml中,添加到列表 View
android:listSelector="@drawable/yourselector" >
这是一个XML文件,您可以在其中执行listview内的click事件,例如以下示例:<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#6018d7e5"
android:centerColor="#6016cedb"
android:endColor="#6009adb9"
android:angle="270" />
</shape>
</item>
<item android:state_pressed="true">
<!-- (...)
</item>
<item android:state_selected="true" android:state_pressed="false">
<!-- (...)
</item>
</selector>
关于java - listview的onItemClick和案例内部循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24734370/