2016-09-14 3 views
0

私はUdacityのアンドロイド初心者コース(初心者ではなくても)をやっていて、少しばかにすることにしました。Android - ボタンを画面に表示して音を正しく表示するようにする

私は、ボタンを(+1値を加えて)画面上の値を変更するか、サウンドを再生することができましたが、両方をミックスすると、ボタンはサウンドのみを再生しますが、 /画面上の値を更新、誰もがなぜ知っている?

私には3つの方法があります。

// This method calls mediaPlayer 
public void mediaPlayer (String sound, String id){ 
    Uri uriPlayer = Uri.parse("android.resource://" + getPackageName() + "/raw/" + sound); 
    final MediaPlayer mp = MediaPlayer.create(this, uriPlayer); 

    int playIdInt = getResources().getIdentifier(id, "id", getPackageName()); 
    Button play_button = (Button)this.findViewById(playIdInt); 
    play_button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      mp.start(); 
     } 
    }); 
} 
画面の表示を呼び出し、変数に+1の値を加算する

/** 
* This method displays the given quantity value on the screen. 
*/ 
private void display(int number) { 
TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view); 
quantityTextView.setText("" + number); 
  • の値を表示するため

    1. :メディアプレーヤを呼び出すための1方法およびメディアプレーヤー方法:

    public void increment (View view){ 
        quantity = quantity + 1; 
        display(quantity); 
        mediaPlayer("mariocoin", "plus_button"); 
    } 
    

    EDIT:ない必要に応じて確認してくださいが、ここでは、ボタンのXMLです:

     <Button 
         android:id="@+id/plus_button" 
         android:layout_width="48dp" 
         android:layout_height="48dp" 
         android:onClick="increment" 
         android:text="+" /> 
    

    事は、私がボタンを最初に再生するとき、それが画面上に1と表示が追加されますが、何の音が再生されないということです。 2回目以降は音だけを再生します。変数に+1を加えたり、画面上の値を変更することはありません。なぜ、どうすればこの問題を解決できますか?

  • +0

    ここで、quantity変数を開始しますか? –

    +0

    @リチャード=あなたが何を意味するのか分かりません。ボタンのXMLコードは、2.method:displayと3.methodの両方を呼び出す1.method:インクリメントを呼び出します。mediaPlayer – mrbTT

    +0

    quantity変数は初期値0でグローバルですか? –

    答えて

    1

    同じボタンに対して2つのClickListenersを定義しているようです。最初のメソッドはインクリメントメソッドを呼び出し、2番目のメソッドはメディアプレーヤーメソッド内で定義されます。そのリスナーは必須ではありません。

    //Somewhere in oncreate .. Not required if xml has onclick specified 
    Button play_button = (Button)this.findViewById(playIdInt); 
    play_button.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
         increment(); 
        } 
    }); 
    
    
    public void increment (View view){ 
         quantity = quantity + 1; 
         display(quantity); 
         mediaPlayer("mariocoin", "plus_button"); 
    } 
    
    // This method calls mediaPlayer 
    public void mediaPlayer (String sound, String id){ 
          Uri uriPlayer = Uri.parse("android.resource://" + getPackageName() + "/raw/" + sound); 
          final MediaPlayer mp = MediaPlayer.create(this, uriPlayer); 
          mp.start(); 
         } 
    
    +0

    これはまさにそれです、ありがとうございます!ちょっと別の質問です:それで、onCreate内にplay_buttonを作成するのがベストプラクティスですか?また、onCreateメソッドの中に "public void onClick(View v)"という行を追加しなかったのですが、それは必要ですか? – mrbTT

    +1

    これを読んでくださいhttp://stackoverflow.com/questions/21319996/android-onclick-in-xml-vs-onclicklistener –

    関連する問題