从另一个 Activity 刷新 Recyclerview

Refresh Recyclerview from another Activity

我的主要 Activity 有一个片段,其中有一个 Recyclerview 检索从数据库填充的所有数据。在这个片段中,我有一个按钮调用另一个 activity 将对象插入数据库。

问题是当 Activity 结束并且 return 到 Main Activity 时,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);
    }

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

谢谢

像这样尝试,

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

希望对你有用

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

1.In MainActivity,用startActivityForResult启动第二个Activity,像这样:

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

REQUEST_CODE 是一个 int.

2.In 第二个 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();
}

3.In 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

    }
}

您可以在 activity(比如说 firstActivity)中创建静态 recyclerview(比如说 mRecyclerview),它会显示您的 recyclerview。 当您在另一个 activity(比如说 secondActivity)的列表中添加新项目时,您可以只使用

     firstActivity.mRecyclerview.getAdapter().notifyDataSetChanged();

我使用这种方式有一段时间了,没有遇到任何性能缺陷,但肯定会用您自己的代码进行测试。

您可以使 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);

如果它可以帮助某人...

我有同样的: “我的 MainActivity 有一个片段,它有一个 RecyclerView 检索从数据库填充的所有数据。在这个片段中,我有一个按钮调用另一个 activity(insertA) 来插入一个对象存入数据库。

问题是当 activity(insertA) 结束并且 returns 到 Main Activity 时 RecyclerView 没有显示我刚刚创建的新项目。"

所以我在 Fragment 按钮中使用了它,它调用了另一个 activity(insertA) 我刚刚调用了

btn_addNew.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent myIntent = new Intent(context, insertA.class);
        startActivity(myIntent);
    }
});

没有完成 finish(); !!!!!!!!!!!!

insertA Activity 中 AddNewThingToTheDataBase() 代替 finish();startActivity(Intent); 的方法中只需输入 onBackPressed();

public void AddNewThingToTheDataBase(){
    *****Inserting in DB code;
    onBackPressed();
}

并在 Main Activity 添加此代码

@Override
public void onResume() {
    super.onResume();
    *YourUpdateRecyleViewFunction();*
}