【问题标题】:Android LoaderManager.LoaderCallbacks<Cursor> adapter.swapCursor(data)Android LoaderManager.LoaderCallbacks<Cursor> adapter.swapCursor(data)
【发布时间】:2014-02-24 13:34:47
【问题描述】:

我有一个带有 ListView 的片段,它实现了 LoaderManager.LoaderCallbacks 有时单击列表项不会触发侦听器。我看到单击的项目突出显示,但仅此而已。当 onLoadFinished 和 onItemClick 同时执行时会发生这种情况。 代码如下:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.folder_list_fragment, container, false);
    listView = (ListView) view.findViewById(R.id.listView);
    listView.setOnItemClickListener(new ListViewOnItemClickListener());
}

private final class ListViewOnItemClickListener implements OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            System.out.println("on click");
            //load new data from the database and execute update asynch
        }
    }

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    listView.setAdapter(adapter);
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    adapter.swapCursor(data);
    System.out.println("swapCursor");
}

日志是:

swapCursor - 第一次初始化

点击 - 点击项目
swapCursor - 更新数据
swapCursor - 更新数据

点击 - 点击项目 swapCursor - 更新数据

点击项目,像普通点击一样查看背景突出显示
swapCursor - 这是问题所在,我点击了一个项目,但之前更新的通知已丢弃 onClick,没有任何关于点击日志的打印

点击时 - 下次点击

【问题讨论】:

    标签: android android-cursoradapter android-loadermanager


    【解决方案1】:

    终于找到问题所在了。

    项目有一个包含一些信息的数据库,INDEX 列的名称为“id”。

    根据本教程http://code.tutsplus.com/tutorials/android-sdk_content-providers--mobile-5549

    投影只是与适配器一起使用的列列表。这 ListView 使用标题,并且可以在项目出现时提供 id 点击。要与适配器一起使用,id 列必须命名为“_id”。

    在解决列名问题之前实施此投影:

    public static final String[] DEFAULT_PROJECTION = new String[] {"id _id", FolderProvider.FOLDER_COLUMN_ID,
                FolderProvider.FOLDER_COLUMN_NAME}; 
    

    所以 ContentProvider 和 CursorAdapter 工作正常,但有一段时间 onItemClick() 被丢弃了。

    将“id”重命名为“_id”即可解决问题。

    这里有很好的LoaderManager.LoaderCallbacks教程http://code.tutsplus.com/tutorials/android-fundamentals-properly-loading-data--mobile-5673

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 2013-08-04
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      相关资源
      最近更新 更多