2011-10-23 2 views
1

私はアンドロイドの開発に新たなんだ、とボタンの仕事はすべて私に新しいですので、まだJavaでGUI年代にプログラムされていません。Hello Worldの複数のボタン別々のアクション

私は、ハローシンプルな世界のアプリを作ってるんだが、我々はそれが素敵にする方法を把握する必要があり、いくつかのボタン/ラジオ/チェックボックスなどがあり、簡潔で具体的なものは何もありません。だから、私はボタンをいくつか手に入れて、トーストの種類を変えたいと思った。

チュートリアルに基づいてトーストを実装したが、インスタンス化されたボタンのすべてではなく私が望むもの。私は他のボタンが何か他のことをしたいと思います。

私はそれがonClickListenerに関係していると思うが、それを超えて、私はこだわっています。

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     btn1 = (Button) findViewById(R.id.button1); 
     btn1.setOnClickListener(this); 

     btn2 = (Button) findViewById(R.id.button2); 
     btn2.setOnClickListener(this); 


     cb=(CheckBox)findViewById(R.id.check); 
     cb.setOnCheckedChangeListener(this); 

     browser=(WebView)findViewById(R.id.webkit); 
     browser.loadUrl("http://www.google.com/search"); 

     } 


    public void onClick(View v) { 
     new AlertDialog.Builder(this).setTitle("MessageDemo").setMessage(
       "This is an Alert Dialogue Toast").setNeutralButton(
       "Here, here!", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dlg, int sumthin) { 
         Toast.makeText(HelloWorldActivity.this, 
           "<clink, clink>", Toast.LENGTH_SHORT).show(); 
        } 
       }).show(); 
    } 

、ここでXMLがボタンのだ

<Button android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Testa" 
    android:layout_weight="0.2"></Button> 

答えて

4

彼らは同じ動作をしますので、あなたは各ボタンに同じonClickListenerを追加しました。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    btn1 = (Button) findViewById(R.id.button1); 
    btn1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      new AlertDialog.Builder(this).setTitle("MessageDemo").setMessage(
       "This is an Alert Dialogue Toast").setNeutralButton(
       "Here, here!", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dlg, int sumthin) { 
         Toast.makeText(HelloWorldActivity.this, 
          "<clink, clink>", Toast.LENGTH_SHORT).show(); 
        } 
      }).show();    
     } 
    }); 

    btn2 = (Button) findViewById(R.id.button2); 
    btn2.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      // Do something different here. 
     } 
    }); 

    // The rest of onCreate 
} 

EDIT:私はあなたの元のコードの部分はどこに行くことになることを明確にする答えを更新しましたが、私は普通ではないでしょうあなたは、実際にこのように、右setOnClickListenerコール内でリスナーを作成することができます非常に読みにくいので、onClickのようなコードの大きな塊を貼り付けてください。あなたはインラインリスナーを定義するに興味を持っていないのであれば、既存のクリックハンドラは、ビューのIDを確認することができ、goto10のソリューションに加えて

public void onCreate(Bundle savedInstanceState) { 
    // other onCreate code 
    btn1 = (Button) findViewById(R.id.button1); 
    btn1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      showBtn1ClickedDialog(); 
     } 
    }); 
    // other onCreate code 
} 

private void showBtn1ClickedDialog() { 
    new AlertDialog.Builder(this).setTitle("MessageDemo").setMessage(
     "This is an Alert Dialogue Toast").setNeutralButton(
     "Here, here!", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dlg, int sumthin) { 
       Toast.makeText(HelloWorldActivity.this,"<clink, clink>", Toast.LENGTH_SHORT).show(); 
      } 
    }).show();    
} 
+0

これを実装するのに苦労。これはonCreateの外にあるべきですか? – TroothHertz

+0

いいえ私は私の答えをもう少し明確に更新します。以前の 'onClick'ハンドラに入れたものは、これらのものの中に入ることができます。 'new AlertDialog ... .show();'また、古い 'onClick'メソッドを削除し、あなたのActivityクラスの宣言から 'onClickListener 'を削除する必要があります。 – goto10

+0

あなたの提案を使用しようとすると、ideがエラーで溢れてしまいます。私はあなたのコードを信じていません。私の能力は – TroothHertz

3

:私はもっとこのような何かを好む

public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.about_button: 
      // handle about 
      break; 
     // etc. 

このようなswitch文ではなく、goto10の解決策、または内部クラスになりがちですが、別の選択肢です。それは言った、私は彼/彼女の答えを投票している、そして私のものではない。近代的なデバイスと、これは大きな問題ではないかもしれませんが、代わりに内部クラスのswitchを使用する

一つの理由は、メモリ使用量で、 - が、各内部クラスは、より多くのスペースを取り、ハンドラが少なければんIMOはこのように効率的です。いずれかのボタンをクリック

1

はのonClickイベントリスナーによって捕捉されるイベントを生成します。ただし、どのクリックがイベントを生成したかをイベント間で自動的に区別するわけではありません。情報は、View Vに含まれており、ビューでスイッチケースを使用することによって、私たちはさまざまなクリックの別のイベントを持つことができます。

@Override 
    public void onClick(View v) { 
     switch(v.getId()){  
      case R.id.btn1: 
       //Do something here 
       break; 
      case R.id.btn2: 
       //Do something else here 
       break; 
      case R.id.btn3: 

       break; 
     } 
    } 

summaryアプリケーションでリスナーを使用する方法について

+0

非常に感謝し、説明に感謝します。 – TroothHertz