java - 对话框在主 Activity 中触发非静态方法

标签 java android android-dialog android-dialogfragment

我有一个将项目添加到listview的对话框,当添加项目时,我需要重置列表适配器(因为如果不是的话,事情就会变得很奇怪)。

我读到here我可以创建一个事件监听器并在主要 Activity 中监听它。我尝试这样做,但它给了我错误。

AddMovieDialog.java:

public class AddMovieDialog extends DialogFragment {
  private OnFinishListener onFinishListener;

  @Override
  public Dialog onCreateDialog(Bundle savedInstanceState) {

    builder.setView(inflater.inflate(R.layout.add_movie_dialog, null))
           .setTitle("Add a movie")
           .setPositiveButton("Add", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                    // stuff

                    if (!movieName.isEmpty()) {
                        // stuff

                        if (AddMovieDialog.this.onFinishListener != null)
                            AddMovieDialog.this.onFinisheListener.finish();
                    }
               }
           });

    // Create the AlertDialog object and return it
    return builder.create();

  }

  public void setOnFinishListener(OnFinishListener listener) {
      this.onFinishListener = listener;
  }

  public interface OnFinishListener {
      void finish();
  }
}

在MainActivity中:

AddMovieDialog addMovieDialog = new AddMovieDialog();
addMovieDialog.setOnFinishListener(new OnFinishListener() {
    public void finish() {

    }
});

但它给了我一个编译错误:“AddMovieDialog 类型的方法 setOnFinishListener(new OnFinishListener(){}) 未定义”

最佳答案

您需要使用该对象调用一个非静态的方法。您不能仅使用类名来调用它。

改成这样

AddMovieDialog addMovieDialog = new AddMovieDialog();
addMovieDialog .setOnFinishListener(new OnFinishListener() {
    public void finish() {

    }
});

也不应该

if (AddMovieDialog.this.onCloseListener != null)
    AddMovieDialog.this.onCloseListener.finish();

if (AddMovieDialog.this.onFinishListener != null)
    AddMovieDialog.this.onFinishListener.finish();

编辑MainActivity 中查看您的导入声明是错的。它应该类似于 com.yourpackagename.AddMovieDialog.OnFinishListener

关于java - 对话框在主 Activity 中触发非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28324329/

相关文章:

java - Hibernate @OneToMany 抛出 MySQLSyntaxErrorException : You have an error in your SQL syntax

java - 在检查回文时如何忽略空格、标点符号和所有不同于字母的字符?

android - 如何在使用 nativescript 在 android 应用程序中加载页面时显示键盘?

java - 在 Activity 之间传递数据不起作用

android - 对话框主题动画问题

java - 由于作用域,对象未初始化

java - 在Java中用3种颜色渐变填充三角形

android - 在android中实现自定义Edittext样式

android - 防止 Dialog(或 DialogFragment)在应用进入后台时关闭

android泄漏窗口强制关闭