0

私はAndroid開発に不慣れです。私の質問が非常に単純な場合は失礼します。

XMLを使用してAndroidレイアウトビューにボタンを作成しようとしました。今、Activityクラス内で、ボタンを取得し、クリックリストナーを追加しようとしています。これは問題なく正常に機能しています。

ボタンクリックの同様の行で、前に説明したダイアログがポップアップ表示されます。このダイアログには、ImageButtonがあります。この画像ボタンをクリックすると、以下のコードを使用してクリックリストナーを設定しようとしています。

 The Activity on create is as below

@オーバーライド

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final Button button = (Button) findViewById(R.id.btnAdd);        
    button.setOnClickListener(this);

}

 @Override
public void onClick(View v) {
final Button btnAdd = (Button) findViewById(R.id.btnAdd);
         if(v==btnAdd) {
            dialog = new Dialog(this);
            dialog.setContentView(R.layout.add_dialog);
            dialog.setTitle("Test Title.");
            dialog.setCancelable(true);

            dialog.show();

        final ImageButton button = (ImageButton) findViewById(R.id.imageButton1);
        try {
            Log.i("Log","1");
            button.setOnClickListener(this);
            Log.i("Log","2");

        }
        catch(Exception e)
        {
            Log.i("Log","3");
            dialog.dismiss();
            //Dialog d = new Dialog(this);
            //d.setTitle("test.");
            Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG).show();
            Toast.makeText(this,e.getLocalizedMessage(),Toast.LENGTH_LONG).show();
            Toast.makeText(this,e.toString(),Toast.LENGTH_LONG).show();
            Log.i("Log","4");
            //d.show();
            Log.i("Log","5");

        }
     }

}

上記では、この順序でログを取得します。1,3,4,5。私は2を取得しません。トーストでは、空白、空白の後にjava.lang.Nullexceptionのメッセージが表示されます。

しかし、これを実行すると、強制的に閉じるポップアップが表示されます。これを行う方法をアドバイスしてください。または、同じ回避策はありますか?ボタンをクリックするためのダイアログボックスが必要です。次に、ダイアログ内に複数のボタンオプションが必要です。ダイアログのボタンごとに、さまざまなアクティビティを実行する必要があります。どんな種類の助けやアドバイスもありがたいです。よろしくお願いします。

4

1 に答える 1

3

おそらく、Activityクラスからボタンを取得しようとしています。このメソッドは(メソッドを使用してsetContentView)アクティビティにアタッチされたリソースのみを取得するため、nullを返します。

2つのオプションがあります。

  • LayoutInflaterを使用してダイアログレイアウトを膨らませることができます
  • Dialogクラスを拡張する場合は、代わりにそのクラス内にリスナーを追加してください。

更新後に編集します。

上で述べたように、問題は次のとおりです。

   final ImageButton button = (ImageButton) findViewById(R.id.imageButton1);

imageButton1はアクティビティのレイアウトの一部ではないためです。次のように置き換えてください。

   final ImageButton button = (ImageButton) dialog.findViewById(R.id.imageButton1);
于 2011-06-03T04:08:30.313 に答える