2

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();
}

このダイアログには、クリックするとダイアログを閉じる [OK] ボタンがあります。

単純に呼び出すアクティビティでこれらのダイアログを表示します

Alerts.DataCleared(MyActivity.this)

今、同じように、ダイアログを閉じるためのキャンセルボタンと別のGoogle Playアプリへのリンクを開くためのマーケットボタンの2つのボタンを持つダイアログを作成したい

私が試してみました

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(marketIntent);Eclipse によって赤い下線が引かれ、このメッセージが表示されます

この問題を解決するにはどうすればよいですか? リンクを開くボタンとキャンセル ボタンのあるダイアログを作成するにはどうすればよいですか?

4

2 に答える 2

3

getPackageName()1)インスタンスメソッドであるため、startActivity()コンテキストで呼び出す必要があります。

Context con2) 別のクラスからこれを行う場合は、セキュリティ ポリシーにより、別のメソッドで定義された内部クラス内の非 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();
}
于 2012-10-21T01:54:05.927 に答える
0

ここでのコンパイル時エラーgetPackageName() and startActivity()は、両方とも (Context からの) インスタンス メソッドであるということです。呼び出したいcon.getPackageName()(つまり、 Context 引数) and con.startActivity().

于 2012-10-21T01:03:45.397 に答える