带有两个按钮的警报对话框问题取消和打开链接活动

时间:2012-10-21 00:51:20

标签: android android-intent dialog android-dialog

我使用 Alert 类,我在其中定义所有警报对话框以向用户显示状态消息。 这是因为管理起来更舒服。

此课程中定义的典型对话框是

public static void DataCleared(Context con) {
    AlertDialog.Builder builder = new AlertDialog.Builder(con);
    builder.setTitle(R.string.data_cleared_title);
    builder.setIcon(android.R.drawable.ic_dialog_info);
    DialogListner listner = new DialogListner();
    builder.setMessage(R.string.data_cleared_text);
    builder.setPositiveButton("ok", listner);

    AlertDialog diag = builder.create();
    diag.show();
}

此对话框有一个确定按钮,单击该按钮可关闭对话框。

我在简单调用

的任何活动中显示这些对话框
Alerts.DataCleared(MyActivity.this)

现在,我想以同样的方式创建一个带有两个按钮的对话框,一个取消按钮关闭对话框,一个市场按钮打开另一个Google的链接播放应用

我试过了

public static void TryThisApp(Context con) {
    AlertDialog.Builder builder = new AlertDialog.Builder(con);
    builder.setTitle(R.string.my_title);
    builder.setIcon(android.R.drawable.ic_dialog_info);
    builder.setMessage(R.string.my_text)
       .setCancelable(false)
       .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               Intent marketIntent = new Intent(
                        Intent.ACTION_VIEW,
                        Uri.parse("market://details?id=com.myapp.sample"
                                + getPackageName()));
                startActivity(marketIntent);
           }
       })
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
           }
       });
    AlertDialog diag = builder.create();
    diag.show();
}

但是不起作用,得到各种编译错误“无法对非静态方法进行静态引用......”

Eclipse将

getPackageName()startActivity(marketIntent);加下划线,带有此消息

我该如何解决这个问题? 如何创建一个带有打开链接和取消按钮的对话框?

2 个答案:

答案 0 :(得分:3)

1)你必须在Context上调用getPackageName()startActivity()因为是实例方法,

2)如果你想从另一个类中执行此操作,必须将Context con声明为final,因为安全策略不允许在另一个方法中定义的内部类中引用非final变量。

3)(没有义务)你应该反转按钮,通常取消在左边,确认在右边

这是正确的代码:

public static void TryThisApp(final Context con) {
    AlertDialog.Builder builder = new AlertDialog.Builder(con);
    builder.setTitle(R.string.my_title);
    builder.setIcon(android.R.drawable.ic_dialog_info);
    builder.setMessage(R.string.my_text)
       .setCancelable(false)
       .setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
 dialog.cancel();

           }
       })
       .setNegativeButton("Market", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               Intent marketIntent = new Intent(
                        Intent.ACTION_VIEW,
                        Uri.parse("market://details?id=com.myapp.sample"
                                + con.getPackageName()));
                con.startActivity(marketIntent);
           }
       });
    AlertDialog diag = builder.create();
    diag.show();
}

答案 1 :(得分:0)

这里的编译时错误只是getPackageName() and startActivity()都是实例方法(来自Context)。您希望调用con.getPackageName()(即您的Context参数)和con.startActivity()