studio - listview with button android
Múltiples botones ''OnClickListener() android (10)
Creé una clase dedicada que implementa View.OnClickListener.
public class ButtonClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
}
}
Luego, creé una instancia de esta clase en MainActivity
private ButtonClickListener onClickBtnListener = new ButtonClickListener();
y luego configure onClickListener para el botón
btn.setOnClickListener(onClickBtnListener);
Actualmente estoy haciendo una aplicación de calculadora simple en Android. Estoy tratando de configurar el código para que cuando se presiona un botón numérico se actualice la pantalla de la calculadora con ese número. Actualmente lo estoy haciendo así.
Button one = (Button) findViewById(R.id.oneButton);
one.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView output = (TextView) findViewById(R.id.output);
output.append("1");
}
});
Funciona, pero estoy escribiendo este mismo código para cada botón de la calculadora. Como puedes imaginar, es muy redundante. ¿Hay alguna forma de escribir este código de una manera más eficiente? ¿Uno que implica no escribir este método para cada botón?
Establezca una etiqueta en cada botón con lo que quiera trabajar, en este caso probablemente un número entero. Entonces solo necesita un OnClickListener para todos sus botones:
Button one = (Button) findViewById(R.id.oneButton);
Button two = (Button) findViewById(R.id.twoButton);
one.setTag(new Integer(1));
two.setTag(new Integer(2));
OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView output = (TextView) findViewById(R.id.output);
output.append(v.getTag());
}
}
one.setOnClickListener(onClickListener);
two.setOnClickListener(onClickListener);
Implemente el método onClick () en su clase pública de actividad / fragmento MainActivity extiende la actividad implementa View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onClick(View v) {
interruptor (itemId) {
// si llamas al fragmento con la barra de nevigación, entonces lo usas.
case R.id.nav_menu1:
fragment = new IntroductionFragment();
break;
// si la actividad de la llamada con la barra de navegación se usa.
case R.id.nav_menu6:
Intent i = new Intent(MainActivity.this, YoutubeActivity.class);
startActivity(i);
// default method for handling onClick Events..
}
}
Me parece que usar una larga cadena if / else (o interruptor), además de la lista de
findViewById(btn).setOnClickListener(this)
es feo.
¿qué tal crear nuevas View.OnlickListeners con anulación, en línea:
findViewById(R.id.signInButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { signIn(); }});
findViewById(R.id.signOutButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { signOut(); }});
findViewById(R.id.keyTestButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { decryptThisTest(); }});
findViewById(R.id.getBkTicksButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { getBookTickers(); }});
findViewById(R.id.getBalsButton).setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) { getBalances(); }});
Puede establecer la propiedad:
android:onClick="buttonClicked"
en el archivo xml para cada uno de esos botones, y use esto en el código de Java:
public void buttonClicked(View view) {
if (view.getId() == R.id.button1) {
// button1 action
} else if (view.getId() == R.id.button2) {
//button2 action
} else if (view.getId() == R.id.button3) {
//button3 action
}
}
Puedes usar esto
TextView output = (TextView) findViewById(R.id.output);
one.setOnClickListener(youractivity.this);
// set the onclicklistener for other buttons also
@Override
public void onClick(View v) {
int id = v.getId();
switch(id) {
case R.id.oneButton:
append("1",output);
break;
case R.id.twoButton:
append("2",output);
break;
case R.id.threeButton:
append("3",output);
break;
}
}
private void append(String s,TextView t){
t.setText(s);
}
Puede identificar las vistas en su actividad en un método separado.
Simplemente tiene que seguir estos pasos para facilitarlo ...
No tiene que escribir un nuevo
onClickListener
para cada
Button
... Simplemente implemente
View.OnClickLister
en su
Activity
/
Fragment
... implementará un nuevo Método llamado
onClick()
para manejar eventos onClick para
Button
, TextView` etc.
- Implemente
OnClickListener()
en suActivity
/Fragment
public class MainActivity extends Activity implements View.OnClickListener {
}
- Implemente el método onClick () en su Actividad / Fragmento
public class MainActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onClick(View v) {
// default method for handling onClick Events..
}
}
- Implementar
OnClickListener()
para botones
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
Button one = (Button) findViewById(R.id.oneButton);
one.setOnClickListener(this); // calling onClick() method
Button two = (Button) findViewById(R.id.twoButton);
two.setOnClickListener(this);
Button three = (Button) findViewById(R.id.threeButton);
three.setOnClickListener(this);
}
- Encuentra botones por ID e implementa tu código.
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.oneButton:
// do your code
break;
case R.id.twoButton:
// do your code
break;
case R.id.threeButton:
// do your code
break;
default:
break;
}
}
Consulte este enlace para obtener más información:
https://androidacademic.blogspot.in/2016/12/multiple-buttons-onclicklistener-android.html
Esto facilitará el manejo de muchos eventos de clic de botones y hará que parezca simple administrarlo ...
Tuve un problema similar y lo que hice fue: crear una matriz de botones
Button buttons[] = new Button[10];
Luego, para implementar el oyente de clics y los id de xml de referencia, utilicé un bucle como este
for (int i = 0; i < 10; i++) {
String buttonID = "button" + i;
int resID = getResources().getIdentifier(buttonID, "id",
"your package name here");
buttons[i] = (Button) findViewById(resID);
buttons[i].setOnClickListener(this);
}
Pero llamarlos sigue siendo el mismo que en el punto de respuesta 4. de Prag. PD: si alguien tiene un método mejor para llamar a todos los botones en Click, haga un comentario.
public class MainActivity extends AppCompatActivity implements OnClickListener {
Button b1,b2;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1= (Button) findViewById(R.id.button);
b2= (Button) findViewById(R.id.button2);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
if(v.getId()==R.id.button)
{
Intent intent=new Intent(getApplicationContext(),SignIn.class);
startActivity(intent);
}
else if (v.getId()==R.id.button2)
{
Intent in=new Intent(getApplicationContext(),SignUpactivity.class);
startActivity(in);
}
}
}
public void onClick(View v) {
int id = v.getId();
switch (id){
case R.id.button1:
//do ur code
Toast.makeText(this,"This is button 1",Toast.LENGTH_SHORT).show();
break;
case R.id.button2:
Intent intent = new Intent(this,SecondActivity.class);
Intent.putExtra("key",value);
startActivity(intent);
break;
case R.id.button3:
//do ur code
break;
case R.id.button4:
//do ur code;
break;
default:
//do ur code;
}
}