我有一个ListView与listselector.xml。 起初,我设置使用setSeletion(位置)的项目。 但与此代码的项目没有得到强调。 当我点击一个项目它只有突出。
ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems);
timeListView = (ListView) findViewById(R.id.listList);
timeListView.setAdapter(ad);
timeListView.setOnItemClickListener(this);
timeListView.setSelector(R.drawable.listselector);
timeListView.setSelection(toSelectPos);
=============================
XML
<ListView android:id="@+id/listList" android:layout_width="match_parent" android:layout_height="wrap_content" android:dividerHeight="1dp" >
listselector.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!-- listselector.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Selected -->
<item android:state_focused="true" android:state_selected="false"
android:drawable="@drawable/focused"/>
<!-- Pressed -->
<item android:state_selected="true" android:state_focused="false"
android:drawable="@drawable/selected" />
</selector>
上面的代码突出全的ListView,我只是要突出项目(BG改变颜色)。 对于我相信我会创建另一个XML对于该项目,并设置选择属性项&如上做就不一一列举。 纠正我,如果我错了。
问题的关键是,反正只在点击所选项目和为setSelection应该改变。 与上面的代码,它不会改变为setSelection,如何做到这一点。
我看着其他QS,但无法找到我要找的地步,所以请不要将其标记为其他Qs的一个副本。
谢谢
正如你可能已经在一些答案在这里看到堆栈溢出,你不能把选择,因为它实现了一个视图,以便用户界面必须始终处于触摸模式,你可以看到这里然而,也有一些变通办法你可以做。
你可以设置你的ListView onItemClick具有以下监听器:
OnItemClickListener itemClickListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View v, int pos, long id) {
if (v == lastSelectedView) {
v.setBackgroundResource(0);
lastSelectedView = null;
} else if (v != lastSelectedView) {
if (lastSelectedView != null)
lastSelectedView
.setBackgroundColor(android.R.color.transparent);
lastSelectedView = v;
v.setBackgroundDrawable(v.getContext().getResources()
.getDrawable(R.drawable.some_row_background));
}
}
};
在此,你将色彩lisview项目如想。 但是有一个陷阱。 如果您滚动向上或向下的意见回收将迎来另一种看法 。 您可以“取消”上滚动视图,或者你能找到一种方法来标记视图。
最好的祝福
我不知道这是否是正确的方式或不但低于解决方案,我从支持-V4实例的片段演示找到。
请检查能够自定义布局和使用此布局列表的列
public class CheckableLayout extends LinearLayout implements Checkable {
private boolean mChecked;
public CheckableLayout (Context context) {
super(context);
}
public CheckableLayout (Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setChecked(boolean checked) {
mChecked = checked;
// set the custom background image/color
setBackgroundResource(checked ? R.drawable.category_item_row_selected
: R.drawable.custom_category_item_row);
}
public boolean isChecked() {
return mChecked;
}
public void toggle() {
setChecked(!mChecked);
}
}
定义你的列表视图作为单一选择模式像YOUR_LISTVIEW.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
对行(点击的inside OnItemClickListener
),你必须设置该行作为托运像YOUR_LISTVIEW.setItemChecked(index, true);
而已