私のメインアクティビティにはフラグメントがあり、データベースから入力されたすべてのデータをRecyclerviewが取得しています。このフラグメントでは、データベースにオブジェクトを挿入するために別のアクティビティを呼び出すボタンがあります。
問題は、アクティビティが終了してメインアクティビティに戻ると、Recyclerviewに作成したばかりの新しいアイテムが表示されないことです。私はこのコードを試してみました:
@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メソッドがオンになり、最後の挿入を再度表示して、このアイテムを2回入力することです(もう一度やります)。
ありがとう
新しいアイテムをMainActivityに戻し、自分で処理します。
1. MainActivityで、次のようにstartActivityForResult
を使用して2番目のアクティビティを開始します。
startActivityForResult(new Intent(this, SecondActivity.class), REQUEST_CODE);
REQUEST_CODE
はint
です。
2. 2番目のアクティビティで、次のように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();
}
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
}
}
Recyclerviewを表示するアクティビティ(firstActivityなど)で静的recyclerview(mRecyclerviewなど)を作成できます。そして、他のアクティビティ(たとえばsecondActivity)でリストに新しいアイテムを追加するときは、次を使用できます。
firstActivity.mRecyclerview.getAdapter().notifyDataSetChanged();
私はしばらくこの方法を使用し、パフォーマンスの問題は発生しませんでしたが、確実に独自のコードでテストしてください。
このようにしてみてください、
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);
}
}
}
それがあなたのために働くことを願っています