我的主Activity包含一个片段,它有一个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);
}
它有效&#34;罚款&#34;。主要问题是当我在我的手机中切换到另一个正在进行的应用程序时,我返回到我开发的应用程序, onResume 方法打开并再次显示我的上一个插入,填充两次此项目(依此类推,如果我再做一次)。
由于
答案 0 :(得分:12)
将新项目传递回MainActivity,然后自行处理。
1.在MainActivity中,使用startActivityForResult
启动第二个Activity,如下所示:
startActivityForResult(new Intent(this, SecondActivity.class), REQUEST_CODE);
REQUEST_CODE
是int
。
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
}
}
答案 1 :(得分:0)
尝试这样,
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);
}
}
}
希望它适合你
答案 2 :(得分:0)
您可以在显示您的recyclerview的活动(比如说firstActivity)中创建静态recyclerview(比如说mRecyclerview)。 而且,当您将其他项目添加到其他活动的列表中时(例如,secondActivity),您可以使用
firstActivity.mRecyclerview.getAdapter().notifyDataSetChanged();
我使用这种方式已经有一段时间了,并且没有遇到任何性能上的缺陷,但是可以使用您自己的代码进行测试。
答案 3 :(得分:0)
您可以将 recyclerView
设为静态并在 onCreate
方法中对其进行初始化
public class MainActivity extends AppCompatActivity {
protected static RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.notes_recycler_view);
displayDataOnRecyclerView(this);
}
然后在MainActivity中创建一个方法来显示recyclerView
中的数据
public static void displayDataOnRecyclerView(Context context) {
//using a Linear Layout Manager
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(context);
recyclerView.setLayoutManager(layoutManager);
//data that will be displayed in the adapter from sqlite database
DatabaseHandler databaseHandler = new DatabaseHandler(context);
List<Model> data = databaseHandler.getAllData();
//specifying the adapter
RecyclerView.Adapter adapter = new RecyclerViewAdapter(data,context);
recyclerView.setAdapter(adapter);
}
最后调用另一个Activity中的displayDataOnRecyclerView
方法
MainActivity.displayDataOnRecyclerView(otherActivity.this);