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属性添加到传递的上下文中即可。下面我已经发布了整个解决方案。