我有一个列表视图,其中我想在按下时为行提供背景颜色。当我选择一个项目时,它会改变颜色,但问题是当我向下滚动其他行时也有颜色我不想那样。
这是我的代码: 提前致谢
listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
final String item = (String) parent.getItemAtPosition(position);
Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
view=parent.getChildAt(position);
view.setBackgroundColor(Color.GREEN);
}
});
}
答案 0 :(得分:0)
我认为您应该在适配器中处理它。列表视图重新使用了元素,在您的情况下,滚动时将重用具有绿色背景的元素。相反,您应该告诉您的适配器点击了哪个项目
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
((YourAdpater)listView.getAdapter()).setSelected(position);
}
});
然后在适配器的getView()中,如果当前位置等于所选位置,则可以设置背景...
或者查看listview的选择模式http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:choiceMode
我对它并不熟悉,但它可能会有所帮助......
答案 1 :(得分:0)
处理此问题的最好方法是设置listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
,它允许您选择多个列表项。
要突出显示所选项目,您只需创建一个自定义背景选择器,该选择器定义项目在哪种状态下的外观。对于你的例子,这将是这样的:
selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" android:state_activated="false"/>
<item android:drawable="@android:color/green" android:state_activated="true"/>
</selector>
将此文件放在drawable文件夹中,并将列表项目设为此背景,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector">
...
</LinearLayout>
这样您就不必处理对商品的点击
您可以通过listview.getCheckedItemPositions()
答案 2 :(得分:0)
要突出显示ListView,您不必手动为它们着色,Android已经有了它的功能。
m_ResultsArrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_activated_1,m_ResultsArray)
使用simple_list_item_activated_1而不是使用simple_list_item_1。这将允许突出显示您的列表,您甚至可以使用
检查哪一个被检查this.m_ResultsListView.getCheckedItemPosition();
希望这能回答你的问题:&gt;