Android 关闭对话框后运行函数

Android 关闭对话框后运行函数,android,android-dialog,Android,Android Dialog,我有一个自定义对话框,我以以下方式显示该对话框: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.dict_add_word_dialog_box); ok = findVi

我有一个自定义对话框,我以以下方式显示该对话框:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.dict_add_word_dialog_box);
    ok = findViewById(R.id.dictDialog_confirmButton);
    cancel = (Button) findViewById(R.id.dictDialog_cancelButton);
    ok.setOnClickListener(this);
    cancel.setOnClickListener(this);
}
点击浮动操作按钮时,通过以下方式显示:

fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DictCustomDialogBoxClass customDialog = new DictCustomDialogBoxClass(DictionaryActivity.this);
            customDialog.show();
            refreshRecyclerView();
        }
    });
我想要一份refreshRecyclerView();仅在用户按下对话框上的“确定”按钮后运行。我该怎么做呢


此外,如果用户只按了“确定”,而没有按“取消”,我将如何运行它?

在其中使用refreshRecyclerView方法创建一个runnable:

Runnable r = new Runnable() {
        @Override
        public void run() {
            refreshRecyclerView();
        }
    }
然后为该runnable创建一个处理程序:

Handler handler = new Handler();
在onClickListener中,ok按钮通过调用以下命令触发runnable:

handler.post(r);

为什么不在自定义对话框中添加一个侦听器呢

var listener: Listener

public interface Listener {
    void onPositiveActionPressed();
}
然后在自定义对话框的ok.onClickListener中,您将看到以下内容:

if(listener != null) {
    listener.onPositiveActionPressed();
}
最后,

DictCustomDialogBoxClass customDialog = new DictCustomDialogBoxClass(DictionaryActivity.this)
customDialog.listener = self

当然,在实现了DictCustomDialogBoxClass.Listener之后,您将在这里找到答案,这里有一些用于对话框的事件侦听器。请参见:OK按钮和Cancel按钮使用相同的onClickListener和开关/案例来检查按钮。如果他们按cancel,是否有办法取消runnable?您可以使用以下处理程序取消它;此外,onClickListener在一个类中,而refreshRecyclerView在一个单独的活动中-我如何调用此函数,因为它是公共的?抱歉,如果这是一个愚蠢的问题,我相当不熟悉,我必须查看您的代码才能确定,但一般来说,您可以将一个方法设置为public static,并且在要使用它的活动中,创建包含它的类的一个对象,并像使用object.nameOfMethod()一样使用它;另一种方法是使用接口并将其作为回调方法。如果你有问题,试着提出一个新的问题,这样更多的人可以看到细节,因为当前的线索是不相关的