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:

 <?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> 

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 exactamente el atributo android: onClick XML difiere de setOnClickListener?
  • Abrir la lista de contactos del dispositivo en el evento de clic de botón
  • Realizar el botón Acción en Haga clic en Notificación personalizada: Android
  • efecto de clic de cuadrícula
  • No se pudo encontrar un método onClick (View) en la clase de actividad android.view.ContextThemeWrapper para onClick handler
  • Android ListView con elementos que se pueden hacer clic en sus filas provoca problemas de desplazamiento continuo
  • Interceptación de clics desde subview en Android
  • Haga clic en el oyente en el botón de Android
  • Cómo hacer clic o tocar en un texto de TextView
  • Usando un bucle para establecer los botones enclicklistener
  • OnClickListener no se puede resolver a un tipo (Eclipse)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.