gpt4 book ai didi

android - Loader 只加载选定的行+下一行

转载 作者:IT王子 更新时间:2023-10-29 06:29:22 25 4
gpt4 key购买 nike

activity A 中,我正在加载一个列表,其中包含我表中的所有值,并设置了一个 setOnItemClickListener 以启动 activity B 并发送一个 uri 通过发送数据使用所选项目的 id[1]

[1]Uri currentTestUri = ContentUris.withAppendedId(TestEntry.CONTENT_URI, id);

activity B 中,我有带有投影的 onCreateLoader:

String[] projection = {
TestEntry._ID,
TestEntry.COLUMN_TEST_ONE,
TestEntry.COLUMN_TEST_TWO}

...与返回语句

return new CursorLoader(this,  
mCurrentTestUri, //Got this from Activity A
projection,
null,
null,
null);

我的 onLoadFinished 看起来像这样:

if (cursor.moveToFirst()) {
int oneColumnIndex = cursor.getColumnIndex(TestEntry.COLUMN_TEST_ONE);
int twoColumnIndex = cursor.getColumnIndex(TestEntry.COLUMN_TEST_TWO);

String currentOne = cursor.getString(oneColumnIndex);
String currentTwo = cursor.getString(twoColumnIndex);

textViewOne.setText(currentOne);
textViewTwo.setText(currentTwo);
}

到目前为止一切顺利,现在我希望显示下一行(就在它下面)的值,但使用不同的投影(我只需要 _IDCOLUMN_TEST_ONE ) 并让 onLoadFinishedtextViewThree 中显示 COLUMN_TEST_ONE 的值。

[values from both rows should be shown at the same time, not one or another]

我可以使用 [2] 从 activity A 获取下一行的 ID,并通过 putExtra 将其作为字符串发送,但这就是我目前所拥有的。

[2]

String nextItemId = String.valueOf(listView.getItemIdAtPosition(position + 1));
if((position+1) < lListView.getCount()) {
intent.putExtra("prevID", nextItemId);
}

..或者我可以使用下一行 ID 创建一个有效的 URI 路径,并将其作为字符串从 Activity A 发送,并在需要时将其转换为 Activity B 中的 URI:

ContentUris.withAppendedId(TestEntry.CONTENT_URI, nextItemId)

How should I change my activity B to load values from the next row and the current one onCreate?

最佳答案

问题出在您的查询上:


Uri currentTestUri = ContentUris.withAppendedId(TestEntry.CONTENT_URI, id);

您在此处指定,您希望查询 具有特定id 的行。任何具有不同 id 的行都不会在 Cursor 中返回。

相反,使用适当的选择参数查询表:


// Load all rows that have id `firstId` or `secondId`
return new CursorLoader(this,
TestEntry.CONTENT_URI,
projection,
TestEntry._ID + "=? OR " + TestEntry._ID + "=?",
new String[] {firstId, secondId},
null);

然后您可以通过以下方式获取secondId行的值:


if (cursor.moveToFirst()) {
...

textViewOne.setText(currentOne);
textViewTwo.setText(currentTwo);

if (cursor.moveToNext()) {
int index = cursor.getColumnIndex(TestEntry.COLUMN_TEST_ONE);
String next = cursor.getString(index);
// Use `next` as needed, may be passed to next activity via extras
}
}

关于android - Loader<Cursor> 只加载选定的行+下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624962/

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