首页 > 解决方案 > 如何在 android Studio 中为我的程序定义回调?

问题描述

我想在 EditActivity 中保存笔记后,在笔记的 Main Activity 更新列表中为 Notebook 程序定义回调,但这不会发生。

编辑活动:

public interface OnClickDoneListener{
    void onClickDone();
}

public void setOnClickDoneListener(OnClickDoneListener onClickDoneListener){
    this.onClickDoneListener=onClickDoneListener;
}
btnDone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (extras != null) {
                myDatabase.updateRow(id, txtTitle.getText().toString(), txtDesc.getText().toString());
                NoteModel noteModel = new NoteModel();
                noteModel.setTitle(txtTitle.getText().toString());
                noteModel.setDesc(txtDesc.getText().toString());
                Intent intent = new Intent(EditActivity.this, MainActivity.class);
                startActivity(intent);
                onClickDoneListener.onClickDone();
            } else {
                Done();
            }

        }
    });

主要活动:

 @Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    setupViews();

    getDataFromDB();
    recyclerView.setAdapter(new NoteAdapter(MainActivity.this,dataList));
    noteAdapter = new NoteAdapter(MainActivity.this,dataList);
    recyclerView.setAdapter(noteAdapter);
    fabAdd = (FloatingActionButton)findViewById(R.id.fab_main_add) ;

    EditActivity editActivity = new EditActivity();
    editActivity.setOnClickDoneListener(new EditActivity.OnClickDoneListener() {
        @Override
        public void onClickDone() {
            noteAdapter.notifyDataSetChanged();
        }
    });

请帮我。

我的英语很差,对不起。

标签: androidcallback

解决方案


EditActivity editActivity = new EditActivity();
editActivity.setOnClickDoneListener(new EditActivity.OnClickDoneListener() {
    @Override
    public void onClickDone() {
        noteAdapter.notifyDataSetChanged();
    }
});

您在这里所做的是在您永远不会使用的 EditActivity 的新实例中设置 OnClickDoneListener 的值。因为当您使用 new Intent(MainActivity.this, EditActivity.class) 启动 EditActivity 时,它将创建一个新的 EditActivity 实例,并且您的界面将为空。

在这种情况下,我建议您使用 android 的广播接收器而不是回调。你所要做的就是:

  • 在 MainActivity 中:您将需要实例化一个广播接收器。您需要在 onCreate 或 onStart 上注册它并在 onStop 或 onDestory 上取消注册它。

  • 在 EditAcitivity 中:每当您想通知 MainActivity 更新列表时,您都会发送广播。

看看这个例子: https ://riptutorial.com/android/example/18305/communicate-two-activities-through-custom-broadcast-receiver


推荐阅读