ビュー、リスナーなどに頭を包み込もうとしています。ボタンプレイとボタンストップの2つのボタンを持つアクティビティがあります。私の問題は、有効なswitchステートメントを生成するのに十分なほどビューとリスナーを完全にラップできないことです。
たとえば、SINGLE Listenerを作成し、それを使用してどのボタンがクリックされたかを判断したいと思います。次に、switchステートメントでクリックされたボタンのIDを何らかの方法で使用しますが、オンラインで見つけたすべてのものはすべてのボタンにSEPARATEリスナーを使用し、Switchステートメントの引数としてViewを使用しているようです。
以下のコードは正しくないことを認識していますが、上記を達成するために必要な変更を探しています。
どのボタンがクリックされたかに応じて、MediaPlayerを制御します。私が持っています:
Button b1 = (Button) findViewById(R.id.buttonplay);
b1.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
// Perform action on click
switch(v.getId()) {
case R.id.buttonplay:
//Play voicefile
MediaPlayer.create(getBaseContext(), R.raw.voicefile).start();
break;
case R.id.buttonstop:
//Stop MediaPlayer
MediaPlayer.create(getBaseContext(), R.raw.voicefile).stop();
break;
}
}
});
最終的には、クリックされたボタンをオンにする最も簡単な方法が欲しいです。私の混乱の大部分は、このコンテキストでのonClickListenersとViewsの使用方法に起因すると考えています。
これを実現する1つの方法は、クラスにOnClickListenerを実装し、次のようにボタンに追加することです。
例:
//make your class implement OnClickListener
public class MyClass implements OnClickListener{
...
//Create your buttons and set their onClickListener to "this"
Button b1 = (Button) findViewById(R.id.buttonplay);
b1.setOnClickListener(this);
Button b2 = (Button) findViewById(R.id.buttonstop);
b2.setOnClickListener(this);
...
//implement the onClick method here
public void onClick(View v) {
// Perform action on click
switch(v.getId()) {
case R.id.buttonplay:
//Play voicefile
MediaPlayer.create(getBaseContext(), R.raw.voicefile).start();
break;
case R.id.buttonstop:
//Stop MediaPlayer
MediaPlayer.create(getBaseContext(), R.raw.voicefile).stop();
break;
}
}
}
詳細については、「 Android Developers> Handling UI Events 」を参照してください。
クラスを変更して(これがメインアクティビティであると仮定して)View.OnClickListenerを実装し、onClickメソッドに配置する一般的なonClickアクションを配置します。
public class MediaPlayer extends Activity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
Button b1 = (Button) findViewById(R.id.buttonplay);
b1.setOnClickListener(this);
//{YOUR APP}
}
@Override
public void onClick(View v) {
// Perform action on click
switch(v.getId()) {
case R.id.buttonplay:
//Play voicefile
MediaPlayer.create(getBaseContext(), R.raw.voicefile).start();
break;
case R.id.buttonstop:
//Stop MediaPlayer
MediaPlayer.create(getBaseContext(), R.raw.voicefile).stop();
break;
}
}}
このビデオからそれを取りました: http://www.youtube.com/watch?v=rm-hNlTD1H 初心者に適しています。
こんにちは、スイッチケースを使用してボタンを切り替えるのは非常に簡単です:-
package com.example.browsebutton;
import Android.app.Activity;
import Android.os.Bundle;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
Button b1,b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button)findViewById(R.id.button1);
b2=(Button)findViewById(R.id.button2);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int id=v.getId();
switch(id) {
case R.id.button1:
Toast.makeText(getBaseContext(), "btn1", Toast.LENGTH_LONG).show();
//Your Operation
break;
case R.id.button2:
Toast.makeText(getBaseContext(), "btn2", Toast.LENGTH_LONG).show();
//Your Operation
break;
}
}}
これを行う最も簡単な方法は、xmlの各ボタンにonClickを設定することです
<Button
Android:id="@+id/vrHelp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_menu_help"
Android:onClick="helpB" />
そして、あなたはこのようなスイッチケースを行うことができます
public void helpB(View v) {
Button clickedButton = (Button) v;
switch (clickedButton.getId()) {
case R.id.vrHelp:
dosomething...
break;
case R.id.coHelp:
dosomething...
break;
case R.id.ksHelp:
dosomething...
break;
case R.id.uHelp:
dosomething...
break;
case R.id.pHelp:
dosomething...
break;
}
}
私がしたことの1つの間違いは、メインクラスの宣言に「OnClickListenerの実装」を含めなかったことです。これは、クリック時のスイッチケースの使用を明確に示すサンプルコードです。コードは、押されたボタンごとに背景色を変更します。お役に立てれば。
public class MainActivity extends Activity implements OnClickListener{
TextView displayText;
Button cred, cblack, cgreen, cyellow, cwhite;
LinearLayout buttonLayout;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cred = (Button) findViewById(R.id.bred);
cblack = (Button) findViewById(R.id.bblack);
cgreen = (Button) findViewById(R.id.bgreen);
cyellow = (Button) findViewById(R.id.byellow);
cwhite = (Button) findViewById(R.id.bwhite);
displayText = (TextView) findViewById(R.id.tvdisplay);
buttonLayout = (LinearLayout) findViewById(R.id.llbuttons);
cred.setOnClickListener(this);
cblack.setOnClickListener(this);
cgreen.setOnClickListener(this);
cyellow.setOnClickListener(this);
cwhite.setOnClickListener(this);
}
@Override
protected void onClick(View V){
int id=V.getId();
switch(id){
case R.id.bred:
displayText.setBackgroundColor(Color.rgb(255, 0, 0));
vanishLayout();
break;
case R.id.bblack:
displayText.setBackgroundColor(Color.rgb(0, 0, 0));
vanishLayout();
break;
case R.id.byellow:
displayText.setBackgroundColor(Color.rgb(255, 255, 0));
vanishLayout();
break;
case R.id.bgreen:
displayText.setBackgroundColor(Color.rgb(0, 255, 0));
vanishLayout();
break;
case R.id.bwhite:
displayText.setBackgroundColor(Color.rgb(255, 255, 255));
vanishLayout();
break;
}
}
Butterknife をswitch-caseとともに使用して、この種のケースを処理します。
@OnClick({R.id.button_bireysel, R.id.button_kurumsal})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.button_bireysel:
//Do something
break;
case R.id.button_kurumsal:
//Do something
break;
}
}
ただし、デフォルトのケースはなく、switchステートメントは失敗します