从另一个活动刷新Recyclerview

时间:2015-05-28 09:28:40

标签: android sqlite android-fragments android-recyclerview

我的主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 方法打开并再次显示我的上一个插入,填充两次此项目(依此类推,如果我再做一次)。

由于

4 个答案:

答案 0 :(得分:12)

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

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

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

REQUEST_CODEint

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