【问题标题】:Dialog fire non-static methods in main activity对话框在主要活动中触发非静态方法
【发布时间】:2015-02-04 14:52:59
【问题描述】:

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

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

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(){}) 未定义”

【问题讨论】:

    标签: java android android-dialog android-dialogfragment


    【解决方案1】:

    您需要使用对象调用非静态方法。你不能只使用类名来调用它。

    改成这个

    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

    【讨论】:

    • 抱歉,我刚刚注意到了。这不是问题,我不小心把它放在这里了。仍然有错误。是的,也是这样。它仍然是同样的错误,当我复制代码时,我更改了一些东西并且它混淆了。感谢您的提醒!
    • MainActiviy 中检查您的导入。应该是com.yourpackagename.AddMovieDialog.OnFinishListener
    • 很高兴为您提供帮助!不要忘记接受答案。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多