Gofilord
Gofilord

Reputation: 6641

Dialog fire non-static methods in main activity

I have a dialog that adds items to a listview, and when an item is added I need to reset the list adapter (because if not things get weird).

I read here that I can create an event listener and listen to it in the main activity. I tried doing so but it gives me errors.

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

In the MainActivity:

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

    }
});

But it gives me a compilation error: "The method setOnFinishListener(new OnFinishListener(){}) is undefined for the type AddMovieDialog"

Upvotes: 0

Views: 302

Answers (1)

Rohit5k2
Rohit5k2

Reputation: 18112

You need to call a method which is non-static using the object. You can't call it using just the class name.

Change to this

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

    }
});

Also shouldn't

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

be

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

EDIT Seem your import statement in MainActivity is wrong. It should be something like com.yourpackagename.AddMovieDialog.OnFinishListener

Upvotes: 1

Related Questions