在光标内容更改后,Dialog的ListView不会调用onClick

时间:2013-08-08 19:59:38

标签: android listview cursor onitemclicklistener

我有一个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. 加载对话框并显示以下标记:   
        
    • 标签1
    •   
    • 标签2
    •   
    • 点按此处修改标签
    •   
  2.   
  3. 用户点击点击此处修改标记以调出ActivityTaggedWords
  4.   
  5. 在ActivityTaggedWords中,用户删除标记2并创建标记3
  6.   
  7. 用户点按“返回”按钮
  8.   
  9. 该应用程序返回Dialog
  10.   
  11. Dialog刷新光标并显示以下标签:   
        
    • 标签1
    •   
    • 标签3
    •   
    • 点按此处修改标签
    •   
  12.   
  13. 用户需要对标签列表进行其他更改。他们点按点击此处修改标签但没有任何反应
  14.   

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

0 个答案:

没有答案