在android中使用界面和对话框

时间:2014-05-25 10:01:40

标签: android android-dialog

我在做什么 ::

  • 我在onclick上有一个按钮,我正在弹出一个对话框
  • UniversalDialog.java有两个逻辑 alertDialog.setNegativeButton& alertDialog.setPositiveButton

我想做什么 ::

  • 我想在里面添加实现代码(内部逻辑) alertDialog.setNegativeButton& alertDialog.setPositiveButton in mainActivity中定义的接口

  • 我怎样才能实现这个目标


MainActivity.java 我的主要活动

public class MainActivity extends Activity implements OnClickListener{

    Button btn1;
    UniversalDialog dialog; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1=(Button) findViewById(R.id.button1);
        dialog = new UniversalDialog(MainActivity.this);

        btn1.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button1:

            dialog.showAlert();

            break;
        }
    }

}

UniversalDialog.java 我有一个对话框功能的课程

public class UniversalDialog  {

    private final Context mContext;
    private final String dialogTitle=null;
    private final String dialogMessage=null;
    private boolean dialogFlag=false;

    public UniversalDialog(Context context) {
        this.mContext = context;        
    }

    public void showAlert(){
        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

        alertDialog.setTitle(dialogTitle);
        alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
        alertDialog.setMessage(dialogMessage);

        alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //Go to home screen
                alertDialog.setCancelable(true);    
            }
        });

        // On pressing Settings button
        alertDialog.setPositiveButton("QuitApp", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                //Go to home screen
                Intent startMain = new Intent(Intent.ACTION_MAIN);
                startMain.addCategory(Intent.CATEGORY_HOME);
                startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mContext.startActivity(startMain);  
            }
        });

        alertDialog.show();
    }
}

2 个答案:

答案 0 :(得分:3)

有几种可能性:

1)你可以传递给对象UniversalDialog MainActivity的构造函数(而不只考虑上下文),并调用后者的方法

public UniversalDialog(MainActivity activity) {
...
}

2)你可以在MainActivity上实现一个特定的接口(你指定要在MainActivity上调用的回调方法)并返回UniversalDialog这个项目

public interface ActionInterface {
   public void methodOk();
   public void methodKO();
}

public class MainActivity ... implements ActionInterface {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        dialog = new UniversalDialog(MainActivity.this, MainActivity.this);
        ...
    }

    public void methodOk() {
     ...
    }

    public void methodKO() {
    ...
    }

}

public class UniversalDialog  {
    public UniversalDialog(Context context, ActionInterface action) {
    ...        
    }

    public void showAlert(){
        ...

       alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                action.methodKO();
                ...
            }
        });

        // On pressing Settings button
        alertDialog.setPositiveButton("QuitApp", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                action.methodOk();
                ...
            }
        });

        alertDialog.show();
    }
}

答案 1 :(得分:2)

我不确定我是否正确理解你的意图。我想您现在在UniversalDialog课程中执行对话框操作的实现,但您希望可以在MainActivity课程中完成。

如果我是对的,那么问题就变得简单了,并且有多种方法可以做到。我们举个例子。

MainActivity中定义一个内部类,让它实现DialogInterface.OnClickListener接口,其onClick方法应该使用which参数。此which参数可帮助您确定单击对话框上的哪个按钮。

如果您不喜欢内部课程,只需让MainActivity实施DialogInterface.OnClickListener,但我从未尝试过2 onClick个功能(DialogInterface.OnClickListener而另一个OnClickListener)将发生冲突。