相关疑难解决方法(0)

数据库更改时,Android SimpleCursorAdapter不会更新

我有一个Android ListActivity是由数据库支持Cursor通过SimpleCursorAdapter.

单击项目时,将切换数据库中相应行中的标志字段,并且需要更新列表中的视图.

问题是,当更新的视图离开屏幕并被回收时,旧视图返回到视图时会显示在视图上.每当thr list重绘时(方向更改等),都会发生同样的事情.

notifydatasetchanged()用来刷新光标适配器,但似乎无效.

我应该如何更新数据库以便更新游标?

database sqlite android cursor listactivity

43
推荐指数
3
解决办法
4万
查看次数

如何从FragmentActivity更新ListFragment中的ListView?

我在FragmentActivity中使用ListFragment以及SimpleCursorAdapter和修改过的CursorLoader.修改后的CursorLoader只发出rawQueries - 没有其他更改.

在FragmentActivity中的某个时刻,我需要重新获取在ListFragment中提供ListView的数据/光标.

我怎样才能做到这一点?

提前谢谢了.

这是FragmentActivity调用ListFragment中的方法:

public class ActivityList extends FragmentActivity {

    @Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) {
        ...
        processUpdateList();
    }

    ...

    private void processUpdateList() {
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragmentlist);
        if (fragment != null) {
            ((FragmentList) fragment).requeryList();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这里是ListFragment,该方法应该启动对ListView的重新查询,重新加载或重新绘制.ListView.invalidate()没有帮助 - 它没有改变显示的数据.

public class FragmentList extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {

    private SimpleCursorAdapter adapter;
    private Context             context;
    private ListView            listView;

    public void requeryList() {
    // listView.invalidate(); didn't re-query
        // TODO: How???
    } …
Run Code Online (Sandbox Code Playgroud)

android listview simplecursoradapter android-fragments android-fragmentactivity

10
推荐指数
1
解决办法
7186
查看次数

更新SimpleCursorAdapter,同时在ListView中保持滚动位置

我的问题:每当我通过其(自定义的)SimpleCursorAdapter更新其内容时,我的ListView会将其滚动位置重置为顶部.我希望ListView在更新时保持其滚动位置.

我开始时每次都使用创建一个新的适配器实例ListView.setAdapter(),但根据这个讨论,我应该更新适配器而不是重置它.我无法找到一种方法来为SimpleCursorAdapter正常工作.

以下是我尝试过的一些事情,省略了方法参数:
- SimpleCursorAdapter.changeCursorAndColumns()使用新光标成功更新适配器但仍然重置滚动位置.
- SimpleCursorAdapter.changeCursor()行为方式相同.
- SimpleCursorAdapter.swapCursor()直到api 11才可用,我正在为api 8开发.
- SimpleCursorAdapter.notifyDataSetChanged()不更新ListView.(也许我还缺少另一个步骤.)
- ListView.invalidate()不更新ListView.
- SimpleCursorAdapter.requery()使ListView为空白,不推荐使用.
- 我对ListView.setSelection()解决方案很熟悉,但我不希望我的ListView在更新时完全移动.这会将其捕捉到列表中的某个位置.

这似乎应该是一个普通而简单的问题.有人处理过吗?

android listview scroll-position simplecursoradapter

9
推荐指数
1
解决办法
5772
查看次数

android:使用ListAdapter和SimpleCursorAdapter刷新ListView

我正在尝试刷新使用创建为SimpleCursorAdapter的ListAdapter的ListView.

这是我在onCreate中创建Cursor和ListAdapter的代码,它填充了ListView.

tCursor = db.getAllEntries();       

ListAdapter adapter=new SimpleCursorAdapter(this,
                R.layout.row, tCursor,
                new String[] columns,
                new int[] {R.id.rowid, R.id.date});

setListAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

然后,我在另一个方法中向db添加一些数据,但我无法弄清楚如何刷新ListView.stackoverflow和其他地方的类似问题提到使用notifyDataSetChanged()和requery(),但ListAdapter或SimpleCursorAdapter的方法都没有.

android listview refresh listadapter simplecursoradapter

3
推荐指数
1
解决办法
1万
查看次数