我有一个 ListActivity 然后管理一个简单的光标适配器来显示文本和图像以及每月每一天的分隔符。这个分隔符和输入适配器的信息是通过使用视图绑定器完成的。由于我需要这个应用程序从 API 8 工作,我发现的一些答案似乎不适用于该 API 版本。
到目前为止,我已经尝试使用 OnItemClickListener 来选择行,然后我已经存储了该行的位置,并将其与 getView 方法一起使用来尝试设置背景资源,但它似乎改变的只是分隔符的颜色不仅选择了当前行,还选择了其他行。
OnItemClickListener 已更改几次,因此当前代码是我最后一次失败的尝试:
datalist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
mC.moveToPosition(arg2); // The Cursor
rowchecked = arg2; // Global variable to store the position
arg1.setBackgroundResource(android.R.color.holo_red_dark); // this is a recent attempt but I knew it would not work
Toast.makeText(getApplicationContext(), "Row "+Integer.toString(arg2) + " Clicked", Toast.LENGTH_LONG).show();
}});
数据列表分配如下:
ListView datalist = getListView();
datalist.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
获取视图如下:
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.viewdata, mC, fields, viewfields)
{
@Override
public View getView(int position,View convertView, ViewGroup parent) {
final View row = super.getView(position, convertView, parent);
if (position == rowchecked) {
Toast.makeText(getApplicationContext(), "Detected row selected , row is :"+Integer.toString(rowchecked), Toast.LENGTH_LONG).show();
//row.setBackgroundResource(Color.BLUE);
row.setBackgroundColor(Color.BLUE);
mC.moveToPosition(position);
row.setSelected(true);
}
return row;
}
};
如果需要 viewbinder 代码,那么我会在请求时发布 - 那里有很多,所以我现在不发布所有内容。
*** 编辑 ****
真的很难让这篇文章的 OnitemLongClick 部分工作 OnitemClick 似乎使用/调用 simplecursoraapter 的 getView 方法,但 OnItemLongClick 侦听器没有。
阅读包括这篇文章在内的其他帖子 ->如何在列表视图上实现长点击侦听器
我已经尝试针对代码中的 listview 对象使用 setonlongclick(true),并尝试将其分配给 XML 布局中的 listview,并且我已经使用 AdapterView.OnItemLongClick 侦听器创建了 OnItemLongLick 侦听器。