Java 获取对话框';s on click listener从单独的对话类进入我的活动
我有一个对话课,在那里我保存了我的对话。现在的问题是,我想在活动中重新获得对话框的视图单击侦听器。我知道这可以通过编写接口来实现,但是有没有其他面向对象的方法呢 我的对话类:Java 获取对话框';s on click listener从单独的对话类进入我的活动,java,android,oop,android-studio,dialog,Java,Android,Oop,Android Studio,Dialog,我有一个对话课,在那里我保存了我的对话。现在的问题是,我想在活动中重新获得对话框的视图单击侦听器。我知道这可以通过编写接口来实现,但是有没有其他面向对象的方法呢 我的对话类: public class Dialogs{ public void testCompletionDialog() { final Dialog dialog = new Dialog(context); dialog.requestWindowFeature(Window.FEATURE
public class Dialogs{
public void testCompletionDialog() {
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
dialog.setContentView(R.layout.test_complete_dialog);
dialog.setTitle("Ratta provet?");
dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//I want my activity to know that this view is clicked.
dialog.dismiss();
}
});
dialog.findViewById(R.id.lesson_btn_ratta).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//I want my activity to know that this view is clicked.
}
});
dialog.show();
}
}
我的活动:
if (areQueOver) {
Dialogs dialogs=new Dialogs(TestActivity.this);
dialogs.testCompletionDialog();
}
您可以使用
在对话框类的onClick中发布一个事件,告知对话框已被单击。事件可能包含一个字符串变量,告知单击了哪个对话框
在活动中订阅并处理事件。您可以检查字符串变量值以了解单击了哪个对话框
修改对话框类,如下所示:
public class Dialogs{
public void testCompletionDialog() {
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
dialog.setContentView(R.layout.test_complete_dialog);
dialog.setTitle("Ratta provet?");
dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post("btn_marker");
dialog.dismiss();
}
});
dialog.findViewById(R.id.lesson_btn_ratta).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post("btn_ratta");
}
});
dialog.show();
@Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(String action){
if(action.equals("btn_ratta")){
} else if(action.equals("btn_marker")) {
}
}
活动内部:
public class Dialogs{
public void testCompletionDialog() {
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
dialog.setContentView(R.layout.test_complete_dialog);
dialog.setTitle("Ratta provet?");
dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post("btn_marker");
dialog.dismiss();
}
});
dialog.findViewById(R.id.lesson_btn_ratta).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post("btn_ratta");
}
});
dialog.show();
@Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(String action){
if(action.equals("btn_ratta")){
} else if(action.equals("btn_marker")) {
}
}
在onCreate内部添加此-
EventBus.getDefault().register(this);
EventBus.getDefault().unregister(this);
在onDestroy中添加以下内容-
EventBus.getDefault().register(this);
EventBus.getDefault().unregister(this);
替代方法:
public class Dialogs{
public void testCompletionDialog() {
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
dialog.setContentView(R.layout.test_complete_dialog);
dialog.setTitle("Ratta provet?");
dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post("btn_marker");
dialog.dismiss();
}
});
dialog.findViewById(R.id.lesson_btn_ratta).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post("btn_ratta");
}
});
dialog.show();
@Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(String action){
if(action.equals("btn_ratta")){
} else if(action.equals("btn_marker")) {
}
}
嗯,除了interface和EventBus之外,您可以向活动中添加公共方法,比如
onDialogClicked(String dialogName){//TODO handle the click as per dialogName}
然后从对话框类中的onClick调用此方法。是如果要调用任何活动方法,则可以通过活动上下文调用: 假设method1()处于“活动”下,您希望从Dailog调用,然后可以通过调用
((MyActivity)((Activity)context)).method1();
将listner用于这样的调用按钮
Simpledialoginterface listner = new Simpledialoginterface() {
@Override
public void ok_button() {
//ok button click
}
@Override
public void cancel_button() {
//cancel button click
}
};
使用此对话框
public static void popupnew(String tittle, String message, String Button, String Cancel,
final Activity context, final Simpledialoginterface listner) {
if (!((Activity) context).isFinishing()) {
android.app.AlertDialog.Builder alertDialog;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
alertDialog = new android.app.AlertDialog.Builder(context, android.R.style.Theme_Material_Light_Dialog_Alert);
} else {
alertDialog = new android.app.AlertDialog.Builder(context);
}
alertDialog.setTitle(tittle);
alertDialog.setMessage(message);
alertDialog.setPositiveButton(Button,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
listner.ok_button();
}
});
alertDialog.setNegativeButton(Cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
listner.cancel_button();
}
});
alertDialog.show();
}
}
//接口类<代码>
公共接口Simpledialoginterface{
public void ok_button();
public void cancel_button();
}
创建一个接口
public interface OnDialogConfirmClickListener {
void onDialogConfirmClick(Class parameter//or empty);
}
将此接口实现到您的活动中
public class MainActivity extends Activity implements OnDialogConfirmClickListener {
...
}
将接口作为参数发送到对话框或testCompletionDialog方法
public void testCompletionDialog(OnDialogConfirmClickListener listener) {
...
dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onDialogConfirmClick(parameter//or empty);
dialog.dismiss();
}
});
...
}
我看到这是一个很好的库,但是使用第三方来完成这样一个小任务是不值得的。我可以使用一个接口,而不是使用第三方。我正在android中寻找一些东西,或者至少是一种通用的java方式。是的,不是为了一个小任务,但是如果你正在制作一个应用程序,那么它是非常有用的。我已经编辑了我的答案。请查收。希望如此它现在很有帮助。是的,它实际上是一个非常好的应用程序解决方案,在应用程序中,你可以在类之间进行大量的通信。然而Chetan answer实际上解决了我的问题,但是你的解决方案确实展示了一种新的方式+1非常感谢。我想知道你应该如何使用
界面
。下面我的答案正好是我想要的。在不使方法静态的情况下调用它。真的很感谢。只是想补充一下,你不需要在这里把它放到活动中,因为(MyActivity)已经有助于了解我们指的是什么,上下文本身也可以在这里起作用。对活动进行施法时,会发出重复施法警告。