我将Selector
作为listSelector
的{{1}}。而且在ListView中,我设置了
ListView
当用户触摸android:choiceMode="singleChoice"
android:listSelector="@drawable/list_selector"
android:background="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
的任何项目时,它会采用正确的蓝色,但一旦用户移开手指,它就会变回黑色。我希望所选项目保留蓝色,直到并且除非用户触摸任何其他项目。
ListView
我需要做些什么改变?
答案 0 :(得分:1)
您必须将android:choiceMode
的{{1}}设置为ListView
。此外,您应该将singleChoice
设置为您已经实现的选择器,并从android:listSelector
的项目中移除该选择器(或任何其他android:background
drawable),以使其背景透明。
除此之外,你应该扩展你的选择器以对ListView
作出反应并注册android:state_checked
,如下所示:
OnItemClickListener
用于列表项的顶级视图组件需要实现接口listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
listView.setItemChecked(position, true);
}
});
。请参阅http://developer.android.com/reference/android/widget/Checkable.html以获取已经开箱即可检查的类列表。如果您只想显示文字Checkable
,请为您执行此操作。否则,如果使用自定义视图,则必须自己实现此接口。
答案 1 :(得分:0)
在onListItemClick
中,强制查看状态:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
v.setSelected(true);
}
答案 2 :(得分:0)
在您的代码中尝试此操作
StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.pressed));
states.addState(new int[] {android.R.attr.state_focused},
getResources().getDrawable(R.drawable.focused));
states.addState(new int[] { },
getResources().getDrawable(R.drawable.normal));
imageView.setImageDrawable(states);
它可能对你有帮助....
答案 3 :(得分:0)
在这种情况下,我认为您需要从ArrayAdapter
课程进行管理。
在那里你必须记住最后点击的项目视图和位置。
基本思路是onListItemClick
将点击的位置和项目视图传递给那里的适配器
我们将使用您喜欢的颜色设置背景,并更改最后选择的视图
背景颜色为默认颜色。
public class SampleAdapter extends ArrayAdapter<Object> {
private int mSelection = 0;
public SampleAdapter(Context context, int resource, int textViewResourceId,
List<Object> objects) {
super(context, resource, textViewResourceId, objects);
}
public void setSelection(int mSelection, View selectedItemView) {
this.mSelection = mSelection;
if (selectedItemView!= null && lastSelectedRow != null
&& selectedItemView!= lastSelectedRow) {
lastSelectedRow
.setBackgroundResource(R.drawable.bg_normal);
selectedItemView
.setBackgroundResource(R.drawable.bg_selected);
}
this.lastSelectedRow = selectedItemView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Usual code logic here....
if (mSelection == position) {
mViewHolder.mRootView
.setBackgroundResource(R.drawable.bg_selected);
lastSelectedRow = mViewHolder.mRootView;
} else {
mViewHolder.mRootView
.setBackgroundResource(R.drawable.bg_normal);
}
return view;
}
private static class ViewHolder {
TextView name;
View mRootView;
}
}
在列表项目上单击,您需要将单击的项目和位置传递给适配器。
public void onItemClick(AdapterView<?> arg0, View listItemView,
int position, long id) {
if(myAdapter != null )
{
myAdapter.setSelection(position,listItemView);
}
}
如果要从其他点调用此设置选择 你可以这样称呼它。
myAdapter.setSelection(position,mListViwe.getChildAt(pos));
mListViwe.setSelectionFromTop(position, 0);