从另一个活动刷新Recyclerview

我有我的主要活动与片段,其中有一个Recyclerview从数据库中填充所有数据。 在这个片段中,我得到一个button,调用另一个活动来将对象插入到数据库中。

问题是当活动结束并返回到主活动Recyclerview不显示我刚刚创build的新项目。 我试着用这段代码:

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

函数getAllItems从sqlite中检索所有的数据。

在我的RecyclerView我的adapterItem我得到这个:

 public void addItem(ArrayList<Item> listItems) { this.listItems = listItems; notifyItemInserted(0); } 

它工作“好”。 主要问题是当我切换到另一个应用程序在我的手机进行中,我回到我的开发应用程序的onResume方法打开,并再次显示我的最后一个插入,两次填充这个项目(等等,如果我再做一次)。

谢谢

Solutions Collecting From Web of "从另一个活动刷新Recyclerview"

将新项目传递回MainActivity,然后自行处理。

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

 startActivityForResult(new Intent(this, SecondActivity.class), REQUEST_CODE); 

REQUEST_CODE是一个int

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

 @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(); } 

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 } } 

卫斯理的答案很好,但有一个缺陷。 从第二个活动返回的数据为 ,并且由于我的编辑被拒绝,所以下面是如何将数据传回给您的调用者活动。 做一切韦斯利说,但是当你创buildreturnIntent添加到setResult像这样:

 @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(); } 

尝试像这样,

 Intent intent = new Intent(Context, YourClass); startActivityForResult(intent, ADD_ITEM); protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { if (requestCode == ADD_ITEM){ adapterItem.addItem(MyApplication.getWritableDatabase().getAllItems()); listProjectsView.scrollToPosition(0); } } } 

希望它能为你工作