猿问

SQLiteDatabase 是同步的还是异步的?

我有一个打开新意图的应用程序。新意图在数据库中插入一些行,然后 finish(); 它并返回到第一个屏幕,数据应该已经用新行刷新了。我的代码在执行时不起作用,但在调试时起作用……所以也许某处有些滞后……也许?如何等待查询完成?


这是我的代码:


在第一个屏幕上:


设置适配器和 onResume


@Override

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

    v= inflater.inflate(R.layout.filters_fragment,container,false);


    createFragmentWidgets();



    myrecyclerview = (RecyclerView) v.findViewById(R.id.contact_recycleview);

    recyclerAdapter = new RecyclerViewAdapterFilters(getContext(), lstFilters);

    myrecyclerview.setLayoutManager(new LinearLayoutManager((getActivity())));

    myrecyclerview.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));

    myrecyclerview.setAdapter(recyclerAdapter);


    return v;

}



@Override

public void onResume()

{  

// After a pause OR at startup

    super.onResume();


    lstFilters = mydb.getAllFilters("BL");

    recyclerAdapter.notifyDataSetChanged();

}

DB 类上的 getAllFilters 方法


public List<Filter> getAllFilters(String type) {

    List<Filter> lstFilter  = new ArrayList<>();


    //hp = new HashMap();

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor res =  db.rawQuery( "select * from " + FILTERS_TABLE_NAME+" where type='"+type+"'", null );

    res.moveToFirst();


    while(res.isAfterLast() == false){

        lstFilter.add(new Filter (res.getInt(res.getColumnIndex(FILTERS_COLUMN_ID)),

                res.getString(res.getColumnIndex(FILTERS_COLUMN_NAME)),

                res.getString(res.getColumnIndex(FILTERS_COLUMN_NUMBER)),

                res.getString(res.getColumnIndex(FILTERS_COLUMN_PHOTO)),

                res.getString(res.getColumnIndex(FILTERS_COLUMN_TYPE))));

        res.moveToNext();

    }


    res.close();

    db.close();


    return lstFilter;

}

有任何想法吗?


烙印99
浏览 114回答 2
2回答

慕标5832272

刷新列表后,调用 notifyDataSetChanged() 应该就足够了,但是,我通常只是重置适配器:&nbsp;&nbsp;&nbsp;&nbsp;adapter&nbsp;=&nbsp;new&nbsp;ClaimListAdapter(this,&nbsp;thisContext,&nbsp;claimItems); &nbsp;&nbsp;&nbsp;&nbsp;mClaimList.setAdapter(adapter);

慕少森

由于您要替换列表的内容,请调用adapter.notifyDataSetChanged()以刷新整个列表。
随时随地看视频慕课网APP

相关分类

Java
我要回答