我有一个DialogFragment,它显示一个简单的标签列表,这要归功于我从应用程序的ContentProvider中检索的游标。我将此光标与MatrixCursor合并,后者包含一个自定义记录,用于将用户定向到应用程序的另一部分,以便他们管理标记列表。
点击此自定义记录会打开另一项活动。从那里,用户可以通过CRUD操作来操纵可用的标签。然后,点击Back按钮将用户带回DialogFragment,然后刷新CursorLoader以显示修改后的Tags。
此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活动按预期启动。
奇怪的是,在操作标签列表并点击返回以返回DialogFragment之后,只有当刷新光标的内容与不同的内容不同时,DialogFragment的onItemClick()
函数才会被称为他们在用户修改标签之前。
例如:
- 加载对话框并显示以下标记:
- 标签1
- 标签2
- 点按此处修改标签
- 用户点击点击此处修改标记以调出ActivityTaggedWords
- 在ActivityTaggedWords中,用户删除标记2并创建标记3
- 用户点按“返回”按钮
- 该应用程序返回Dialog
- Dialog刷新光标并显示以下标签:
- 标签1
- 标签3
- 点按此处修改标签
- 用户需要对标签列表进行其他更改。他们点按点击此处修改标签但没有任何反应
醇>
为什么刷新的listView不会调用onItemClick()?我是否需要将this
重新分配给onResume中的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;
}