Использование инструкции Switch для щелчков кнопки управления
Я пытаюсь обернуть голову вокруг видов, слушателей и т.д. У меня есть задание с двумя кнопками: нажатие кнопки и нажатие кнопки. Моя проблема в том, что я не могу полностью обернуть голову вокруг Views и Listeners, чтобы сгенерировать рабочий оператор switch.
Например, мне бы хотелось создать ОДИН Слушатель и каким-то образом использовать его, чтобы определить, какая кнопка нажата. Затем каким-то образом используйте идентификатор кнопки, нажатой в моем операторе switch, но все, что я нахожу в сети, похоже, использует SEPARATE слушатели для каждой кнопки, а затем каким-то образом использует View в качестве аргумента оператора Switch.
Я понимаю, что приведенный ниже код неверен, но я ищу, какие изменения мне понадобятся для достижения вышеизложенного.
Я хочу управлять 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 > Обработка событий пользовательского интерфейса.
Ответ 2
Просто измените класс (я полагаю, это основное Activity) для реализации 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-hNlTD1H0. Это хорошо для начинающих.
Ответ 3
Привет, довольно просто сделать переключатель между кнопками с помощью корпуса переключателя: -
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;
}
}}
Ответ 4
Я обнаружил, что самый простой способ сделать это - установить onClick для каждой кнопки в xml
<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;
}
}
Ответ 5
Одна ошибка в том, что я сделал, не включала "реализует 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;
}
}
Ответ 6
Я использую Butterknife с ключом для обработки таких случаев:
@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 падает через