对话框在 main activity 中触发非静态方法
Dialog fire non-static methods in main activity
我有一个将项目添加到 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() {
}
});
但是它给我一个编译错误:"The method setOnFinishListener(new OnFinishListener(){}) is undefined for the type AddMovieDialog"
您需要调用一个使用该对象的非静态方法。您不能仅使用 class 名称来调用它。
改成这个
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
我有一个将项目添加到 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() {
}
});
但是它给我一个编译错误:"The method setOnFinishListener(new OnFinishListener(){}) is undefined for the type AddMovieDialog"
您需要调用一个使用该对象的非静态方法。您不能仅使用 class 名称来调用它。
改成这个
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