由于我从应用程序的 ContentProvider 检索到的光标,我有一个 DialogFragment 显示一个简单的标签列表。我将此光标与包含自定义记录的 MatrixCursor 合并,我使用该自定义记录将用户引导到应用程序的另一部分,让他们管理标签列表。
点击此自定义记录会打开另一个活动。从那里,用户可以通过 CRUD 操作来操作可用的标签。之后,点击 Back 按钮将用户带回 DialogFragment,然后刷新 CursorLoader 以显示修改后的标签。
此 DialogFragment 实现AdapterView.OnItemClickListener
- 这是 Dialog 的onItemClick()
功能:
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
{
// Debug
Log.i("DialogAssignTags", "Item clicked");
CheckBox cb = (CheckBox) view.findViewById(android.R.id.checkbox);
int labelID = (Integer) cb.getTag();
if(labelID == gNoTagsCursorID)
{
startActivity(new Intent(getActivity(), ActivityTaggedWords.class));
}
}
第一次打开 DialogFragment 时,我点击自定义记录,ActivityTaggedWords 活动按预期启动。
奇怪的是,在操作完 Tags 列表并点击 Back 返回到 DialogFragment 之后,只有当刷新的光标内容与用户修改 Tags 之前的内容onItemClick()
不同时,才不再调用 DialogFragment 的函数。
例如:
- 对话框已加载并显示以下标签:
- 标签 1
- 标签 2
- 点击此处修改标签
- 用户点击点击此处修改标签以调出 ActivityTaggedWords
- 在 ActivityTaggedWords 中,用户删除标签 2 并创建标签 3
- 用户点击返回按钮
- 应用程序返回对话框
- 对话框刷新光标并显示以下标签:
- 标签 1
- 标签 3
- 点击此处修改标签
- 用户需要对标签列表进行额外的更改。他们点击点击此处修改标签,但没有任何反应
为什么刷新的listView没有调用onItemClick()?我需要重新分配给onResumethis
中的 ListView吗?onItemClickListener()
编辑:这是我的 LoaderCallbacks.onLoadFinished()
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor)
{
if(cursor.moveToFirst())
{
// Add a cursor that lets the user jump straight to Vocab to manage tags
Cursor manageTagsCursor = getManageTagsCursor();
Cursor[] cursors = { cursor, manageTagsCursor };
Cursor finalCursor = new MergeCursor(cursors);
gAdapter.swapCursor(finalCursor);
}
else
{
// Add a custom cursor that will direct the user to ActivityTaggedWords
Cursor noTagsCursor = getManageTagsCursor();
gAdapter.swapCursor(noTagsCursor);
}
}
这是 getManageTagsCursor():
private MatrixCursor getManageTagsCursor()
{
MatrixCursor cursor = new MatrixCursor(new String[] { "_id", "label", "tagged"});
cursor.addRow(new String[] { String.valueOf(gNoTagsCursorID), getResources().getString(R.string.dialog_assign_tags_no_tags), "0" });
return cursor;
}