2

由于我从应用程序的 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. 对话框已加载并显示以下标签:
    • 标签 1
    • 标签 2
    • 点击此处修改标签
  2. 用户点击点击此处修改标签以调出 ActivityTaggedWords
  3. 在 ActivityTaggedWords 中,用户删除标签 2 并创建标签 3
  4. 用户点击返回按钮
  5. 应用程序返回对话框
  6. 对话框刷新光标并显示以下标签:
    • 标签 1
    • 标签 3
    • 点击此处修改标签
  7. 用户需要对标签列表进行额外的更改。他们点击点击此处修改标签,但没有任何反应

为什么刷新的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;
}
4

0 回答 0