Botones del diseño de Inflated onClick el oyente no funciona
¡Todos mis otros métodos del onClick trabajan excepto ésos en los cuales tengo que inflar el diseño para conseguir el botón! ¡Qué estoy haciendo mal! Aquí está un código:
package com.games.think; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.RadioButton; import android.widget.TableLayout; public class Think extends Activity{ //What question are we on? int question = 1; //What level are we on? String lvl ="1"; //Radio buttons we need to access them global RadioButton lvl1; RadioButton lvl2; RadioButton lvl3; RadioButton lvl4; RadioButton lvl5; /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //play Button play = (Button)findViewById(R.id.play); play.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { playOnClick(v); } }); //level Button level = (Button)findViewById(R.id.level); level.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { levelOnClick(v); } }); //setLevel LayoutInflater inflater = LayoutInflater.from(this); TableLayout tbl = new TableLayout(this); View playv = inflater.inflate(R.layout.level, null); Button updateLevel = (Button) playv.findViewById(R.id.updateLevel); tbl.addView(updateLevel); updateLevel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateLevelOnClick(v); } }); View levelv = inflater.inflate(R.layout.play, null); Button gotomenu = (Button) levelv.findViewById(R.id.tomenu); gotomenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { toMenuOnClick(v); } }); //Radio Buttons lvl1 = (RadioButton) levelv.findViewById(R.id.lvl1); lvl2 = (RadioButton) levelv.findViewById(R.id.lvl2); lvl3 = (RadioButton) levelv.findViewById(R.id.lvl3); lvl4 = (RadioButton) levelv.findViewById(R.id.lvl4); lvl5 = (RadioButton) levelv.findViewById(R.id.lvl5); //tomenu lvl = getLevel(); if(lvl.equals("-1")) { lvl=getLevel(); } } protected void toMenuOnClick(View v) { setContentView(R.layout.main); } protected void updateLevelOnClick(View v) { setContentView(R.layout.main); } protected void levelOnClick(View v) { setContentView(R.layout.level); if(lvl.equals("1")) { lvl1.setChecked(true); } if(lvl.equals("2")) { lvl2.setChecked(true); } if(lvl.equals("3")) { lvl3.setChecked(true); } if(lvl.equals("4")) { lvl4.setChecked(true); } if(lvl.equals("5")) { lvl5.setChecked(true); } } protected void playOnClick(View v) { setContentView(R.layout.play); setQuestion(); } private String getLevel() { String FILENAME = "think_level"; FileInputStream fis; byte[] buffer = new byte[1000]; try { fis = openFileInput(FILENAME); } catch (FileNotFoundException e) { setLevel("1"); return "-1"; } try { fis.read(buffer,0,1000); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String level = buffer.toString(); return level; } private void setLevel(String _level) { String FILENAME = "think_level"; String level = _level; FileOutputStream fos; try { fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(level.getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } private void setQuestion() { } }
Aquí están mis archivos xml: Main.xml:
- OnClick PendingIntent en widget a veces no funciona
- Descartar Snackbar A la izquierda deslizar
- Cómo configurar onclick listener para un botón en un fragmento en android
- cambiar el color de fondo de ListView desactiva el color de resaltado
- Adaptador personalizado para gridview en android
<?xml version="1.0" encoding="utf-8"?> <TableLayout android:id="@+id/tableLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/imageView1" android:src="@drawable/think" android:scaleType="fitCenter"></ImageView> <Button android:id="@+id/play" android:text="Play" android:layout_height="wrap_content" android:layout_width="wrap_content" ></Button> <Button android:text="Level" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/level"></Button> </TableLayout>
Aquí está mi nivel.xml
<?xml version="1.0" encoding="utf-8"?> <TableLayout android:id="@+id/tableLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="Level:" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content"> <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content"> <RadioButton android:id="@+id/lvl1" android:text="Level 1" android:layout_height="wrap_content" android:checked="true" android:layout_width="wrap_content"></RadioButton> <RadioButton android:id="@+id/lvl2" android:text="Level 2" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton> <RadioButton android:id="@+id/lvl3" android:text="Level 3" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton> <RadioButton android:id="@+id/lvl4" android:text="Level 4" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton> <RadioButton android:id="@+id/lvl5" android:text="Level 5" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton> </RadioGroup> </TableRow> <Button android:text="Set Level" android:id="@+id/updateLevel" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </TableLayout>
Aquí está play.xml:
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ScrollView android:id="@+id/scrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="TextView" android:id="@+id/question" android:layout_height="wrap_content" android:layout_width="wrap_content"></TextView> </ScrollView> <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RadioButton android:id="@+id/radioButton1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="RadioButton"></RadioButton> <RadioButton android:id="@+id/radioButton2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="RadioButton"></RadioButton> <RadioButton android:id="@+id/radioButton3" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="RadioButton"></RadioButton> </RadioGroup> <Button android:id="@+id/go" android:text="Go" android:layout_height="wrap_content" android:layout_width="wrap_content"></Button> <Button android:id="@+id/tomenu" android:text="Back To Menu" android:layout_height="wrap_content" android:layout_width="wrap_content"></Button> </TableLayout>
- La forma más fácil de tener el botón de abrir el navegador a la URL específica
- Vistas superpuestas de Android y OnClick
- Cómo desmarcar un elemento en gridview en segundo clic en android?
- Android: ¿Cómo vas a otra actividad al hacer clic?
- Android Clic en el texto de la pantalla
- Cómo obtener OnClick () de los botones agregados mediante programación?
- Haga clic en el elemento de lista de un ListView no responde
- Android: clics retardados en ListView
El problema es que la vista que agrega no tiene un padre y, por lo tanto, no puede recibir eventos de clic. Actualmente está inflando la vista usando
View playv = inflater.inflate(R.layout.level, null);
Deberá colocar una vista principal en ese segundo argumento.
View playv = inflater.inflate(R.layout.level, parentView, false);
Esto le permitirá usar una vista principal, pero no adjuntarla.
Así que los botones están en su nivel y los diseños de juego, y usted está inflando esos diseños, pero no parece que usted nunca está añadiendo los diseños a la vista principal / diseño. ¿Realmente eres capaz de ver esos dos diseños que estás inflando?
No hay ninguna razón aparente por la que esto no debería funcionar.
Todas las vistas creadas en tiempo de ejecución se deben agregar a su linea lineal (o cualquier otro diseño padre) usando:
linearLayoutMain.addView(updateLevel);
¿Ha utilizado estos botones en cualquiera de los diseños lineales en su archivo xml, es decir, ¿aparecen estos botones cuando alcanza la actividad correspondiente?
Debería ver la excepción en tbl.addView(updateLevel);
, Porque está intentando agregar una vista cuyo padre ya está especificado.
¿No está viendo esta excepción?
La inflación es el método asíncrono, puede intentar agregar el oyente de clics después de su inflado
//only inflate in oncreate / onresume inflater.inflate( R.layout.play, // resource this, // root true); //attach to root //overide onFinishInflate and get the view here protected void onFinishInflate() { super.onFinishInflate(); Button gotomenu = (Button) levelv.findViewById(R.id.tomenu); gotomenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { toMenuOnClick(v); } }); }
Si usted quiere el valor del artículo en el tecleo del artículo apenas utiliza .setTag (un cierto valor); Y getTag ();
RelativeLayout firstContactRlayout = (RelativeLayout) myLayout.findViewById(R.id.firstContactRlayout); firstContactRlayout.setTag(number); firstContactRlayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String gettags = (String) v.getTag(); Log.e("gettags", "--" + gettags); } });
- Cómo bloquear la cámara en Google Maps API V2
- Android Retrofit | Publicar objeto personalizado (enviar json al servidor)