我使用 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);
加下划线,带有此消息
我该如何解决这个问题? 如何创建一个带有打开链接和取消按钮的对话框?
答案 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()
。