Android 使用两个按钮“取消”和“打开链接”活动发出警报对话框

Android 使用两个按钮“取消”和“打开链接”活动发出警报对话框,android,android-intent,dialog,android-dialog,Android,Android Intent,Dialog,Android Dialog,我使用一个警报类,在该类中定义所有警报对话框,以向用户显示状态消息。 这是因为管理起来更舒适 此类中定义的典型对话框是 public static void DataCleared(Context con) { AlertDialog.Builder builder = new AlertDialog.Builder(con); builder.setTitle(R.string.data_cleared_title); builder.setIcon(android.R

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

此类中定义的典型对话框是

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 Play应用程序的链接

我试过了

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();
}
但不起作用,会出现各种编译错误“无法对非静态方法进行静态引用…”

getPackageName()
startActivity(市场内容)被Eclipse用红色下划线标出,带有以下消息

如何解决此问题?
如何创建带有“打开链接”和“取消”按钮的对话框?

这里的编译时错误只是
getPackageName()
和startActivity()
都是实例方法(来自上下文)。要调用
con.getPackageName()
(即上下文参数)和
con.startActivity()

1)必须在上下文上调用
getPackageName()
startActivity()
,因为它们是实例方法

2) 如果要从另一个类执行此操作,则必须将
上下文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();
}

编译错误指向哪一行?也许可以使用该信息在上述代码中添加注释?getPackageName();和startActivity(市场内容);带有红色下划线,消息为“无法对非静态方法进行静态引用…”“get Other error”无法引用在不同方法中定义的内部类中的非最终变量“听起来像是要用最终修饰符定义另一个上下文对象,并将其初始化为指向con,您只需将final属性添加到传递的上下文中即可。下面我已经发布了整个解决方案。