我有一个由SQLiteDB提供的ListView。在返回的每一行上,我有一个可点击的TextView,onClick应删除该行上的项目。所以我需要找到sql rowid,所以我可以调用deleteItem(rowid)。
我已经尝试输入一个不可见的TextView,当我填充ListView时,我用sql rowid填充它,它可以工作。但是我将内容视图设置为R.layout.list_view,而不可见的TextView位于R.layout.list_item(每个项目行的自定义布局),所以我似乎无法访问它。
我如何开展这项工作或有更好的方法?
以下是填充listview的代码:
private void fillData() {
// Get all of the notes from the database and create the item list
Cursor c = mDbHelper.fetchAllNotes();
startManagingCursor(c);
String[] from = new String[] { CommonDbAdapter.KEY_NOTES };
int[] to = new int[] { R.id.text1 };
// Now create an array adapter and set it to display using our row
SimpleCursorAdapter notes =
new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
setListAdapter(notes);
}
这是我当前的点击监听器,我不知道如何区分项目上的点击,将项目返回到另一个活动,以及单击将删除项目的textview。
itemList = (ListView) findViewById(android.R.id.list);
itemList.setTextFilterEnabled(true);
itemList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Intent intent = new Intent();
Bundle b = new Bundle();
b.putString("TEXT", ((TextView)v.findViewById(R.id.text1)).getText().toString());
intent.putExtras(b);
setResult(SUCCESS_RETURN_CODE, intent);
finish();
}
});
我原本试图获取rowid并在布局中使用简单的onClick设置。但是遇到了这个问题。
public void clickDelete(View view) {
mDbHelper.deleteNote(rowid);
}
答案 0 :(得分:1)
这是一种快速获取文本视图点击监听器的方法:
替换你的行:
SimpleCursorAdapter notes = new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
setListAdapter(notes);
用这个:
setListAdapter(new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
final TextView t = (TextView)v.findViewById(R.id.text1);
t.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Hello " + t.hashCode(), Toast.LENGTH_SHORT).show();
}
});
return v;
}
});
现在,您的text1
视图将有一个onclick监听器,您可以随心所欲。您需要将rowId
存储在onClick
方法内可访问的地方。
这并不完全回答我猜的问题,但是它为列表视图中的单个视图提供了一个点击监听器。
你真的应该实现一个自定义的CursorAdapter
类来执行这样的操作,尽管你可以从某个地方乱砍并检索rowId
或者您可以使用不可见的textview并向其添加onclick侦听器(如上所示),抓取它的值(这是一个rowId),然后执行操作。
答案 1 :(得分:0)
您使用的是CursorAdapter
吗?如果是这样,您可以直接查询Cursor
的rowid。
您可能希望使用OnItemClickListener而不是OnClickListener。这将为您设置ListView,位置和ID。我相信如果你使用的是CursorAdapter,那么给你的id就是数据库中行的实际rowid。
修改:如果无法使用OnItemClickListener
,您必须从CursorAdapter
更改为SimpleCursorAdapter
才能执行此操作。在bindView方法中,您可以访问要创建的View的rowid,并且可以在您创建的OnClickListener
中引用它。