从单独的Dialog类中获取对话框中的Dialog进入我的Activity

时间:2017-03-03 07:04:57

标签: java android oop android-studio dialog

我有一个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();
                }

4 个答案:

答案 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();