android-fragments 从另一个活动刷新循环视图

46qrfjad  于 2022-11-14  发布在  Android
关注(0)|答案(5)|浏览(148)

我的主Activity有一个片段,它有一个Recyclerview,用于检索从数据库填充的所有数据。在这个片段中,我得到了一个按钮,用于调用另一个Activity将对象插入到数据库中。
问题是当Activity结束并返回到Main Activity时,Recycler视图没有显示我刚创建的新条目。我尝试使用以下代码:

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

函数getAllItems从sqlite中检索所有数据。
在我的adapterItem从我的Recyclerview我得到了这个:

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

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

lnxxn5zx

lnxxn5zx1#

将新项目传递回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

    }
}
bvn4nwqk

bvn4nwqk2#

您可以在显示回收视图的activity(比如firstActivity)中创建静态回收视图(比如mRecyclerview)。当您在其他activity(比如secondActivity)中向列表添加新项时,您可以使用

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

我使用这种方法有一段时间了,没有遇到任何性能缺陷,但可以肯定地是,用您自己代码测试它。

f1tvaqid

f1tvaqid3#

如果这能帮到谁...
我也是这样:“我的MainActivity有一个片段,其中有一个RecyclerView,用于检索从数据库填充的所有数据。在这个片段中,我得到了一个按钮,用于调用另一个activity(insertA)将对象插入数据库。
问题是,当activity(insertA)结束并返回到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中,方法AddNewThingToTheDataBase()中的活动不是finish();startActivity(Intent);,而是onBackPressed();

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

并在Main Activity中添加以下代码

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

o75abkj44#

试试看像这样,

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

我希望它对你有用

fruv7luv

fruv7luv5#

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

最后,调用另一个“活动”中的displayDataOnRecyclerView方法

MainActivity.displayDataOnRecyclerView(otherActivity.this);

相关问题