gpt4 book ai didi

android - 如何在 ListView 中从 SQLiteDB 获取 RowID?

转载 作者:行者123 更新时间:2023-11-30 04:45:13 27 4
gpt4 key购买 nike

我有一个由 SQLiteDB 提供的 ListView。在返回的每一行上,我都有一个可点击的 TextView,onClick 应该删除该行上的项目。所以我需要找到 sql rowid,这样我就可以调用 deleteItem(rowid)。

我已经尝试放入一个不可见的 TextView,我在填充 ListView 时用 sql rowid 填充它,它可以工作。但是我将内容 View 设置为 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);
}

这是我当前的点击监听器,我不确定如何区分将项目返回到另一个 Activity 的项目点击和将删除项目的 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 集。但是在获取 rowid 时遇到了问题。

public void clickDelete(View view) {
mDbHelper.deleteNote(rowid);
}

最佳答案

这里有一个为你的 TextView 获取点击监听器的快速方法:

替换你的行:

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 View 将有一个 onclick 监听器,您可以做任何您想做的事情。不过,您需要将 rowId 存储在可从 onClick 方法内部访问的某个位置。

这并不能完全回答我猜想的问题,但它为 ListView 中的单个 View 提供了一个点击监听器。

你真的应该实现一个自定义的 CursorAdapter 类来做这样的事情,虽然你可以绕过并从某个地方检索 rowId

或者您可以改为使用不可见的 textview 并向其添加 onclick 监听器(如我上面所示),获取它的值(即 rowId),然后执行操作。

关于android - 如何在 ListView 中从 SQLiteDB 获取 RowID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5148154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com