我有一个Dialog类,我保留了对话框。现在的问题是我希望在我的活动中获取View对话框的回显。我知道这可以通过编写一个接口来完成,但还有其他任何OOP方式吗?
我的对话类:
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();
}
答案 0 :(得分:2)
您可以使用EventBus
来使用它在您的Dialog类中的onClick内发布一个事件,告知已单击对话框。该事件可能包含一个字符串变量,告知单击了哪个对话框。
在您的活动内部订阅并处理该事件。您可以检查String变量值以了解单击了哪个对话框。
修改您的Dialogs类,如下所示:
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);
在onDestroy里面添加这个 -
EventBus.getDefault().unregister(this);
替代方法:
嗯,除了interface和EventBus之外,您可以向Activity中添加一个公共方法,例如
onDialogClicked(String dialogName){//TODO handle the click as per dialogName}
然后从Dialogs类中的onClick调用此方法。
答案 1 :(得分:0)
将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();
}
}
// interface class
public interface Simpledialoginterface {
public void ok_button();
public void cancel_button();
}
popupnew("title","message","OK","Cancel",this,listner);//call dialog
答案 2 :(得分:0)
创建一个界面。
C:\Users\myNewName
为您的活动实施此界面。
public interface OnDialogConfirmClickListener {
void onDialogConfirmClick(Class parameter//or empty);
}
将interface作为参数发送到Dialogs或testCompletionDialog方法。
public class MainActivity extends Activity implements OnDialogConfirmClickListener {
...
}
答案 3 :(得分:-1)
是的,如果您想调用Actvity的任何方法,那么您可以通过Activity的上下文调用:
假设method1()在Activity下,你想从Dailog调用,那么你可以调用。
((MyActivity)((Activity)context)).method1();