从另一个活动刷新Recyclerview

Jos*_*e M 12 sqlite android android-fragments android-recyclerview

我的主要Activity包含一个片段,它有一个Recyclerview,用于从数据库中填充所有数据.在这个片段中,我得到了一个按钮,它调用另一个活动将对象插入数据库.

问题是,当活动结束并返回主活动时,Recyclerview不会显示我刚刚创建的新项目.我尝试了这段代码:

 @Override
    public void onResume() {
            super.onResume();
            adapterItem.addItem(MyApplication.getWritableDatabase().getAllItems());
            listProjectsView.scrollToPosition(0);
        }
Run Code Online (Sandbox Code Playgroud)

函数getAllItems从sqlite中检索所有数据.

在我的来自Recyclerview的adapterItem上,我得到了这个:

public void addItem(ArrayList<Item> listItems) {
        this.listItems = listItems;
        notifyItemInserted(0);
    }
Run Code Online (Sandbox Code Playgroud)

它工作"很好".主要的问题是当我在我的手机中切换到另一个正在进行的应用程序时,我返回到我开发的应用程序,onResume方法打开并再次显示我的最后一个插入,填充两次这个项目(如果我再次这样做,依此类推).

谢谢

Wes*_*ley 12

将新项目传递回MainActivity,然后自己处理.

1.在MainActivity中,用于startActivityForResult启动第二个Activity,如下所示:

startActivityForResult(new Intent(this, SecondActivity.class), REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

REQUEST_CODE是一个int.

2.在第二个Activity中,覆盖finish如下:

@Override
public void finish() {
    Intent returnIntent = new Intent();
    returnIntent.putExtra("passed_item", itemYouJustCreated);
    // setResult(RESULT_OK);
    setResult(RESULT_OK, returnIntent); //By not passing the intent in the result, the calling activity will get null data.
    super.finish();
}
Run Code Online (Sandbox Code Playgroud)

3.在MainActivity中,覆盖onActivityResult如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        YourItem passedItem = data.getExtras().get("passed_item");
        // deal with the item yourself

    }
}
Run Code Online (Sandbox Code Playgroud)