膨胀的布局的buttononClick监听器不工作

我所有的其他onClick方法工作,除了我必须膨胀的布局,以获得button! 我究竟做错了什么! 这里是一些代码:

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() { } } 

这里是我的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> 

这是我的level.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> 

这里是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> 

Related of "膨胀的布局的buttononClick监听器不工作"

问题是您添加的视图没有父级,因此无法接收点击事件。 目前,您正在使用的视图膨胀

 View playv = inflater.inflate(R.layout.level, null); 

你会想在第二个参数中放置父视图。

 View playv = inflater.inflate(R.layout.level, parentView, false); 

这将允许您使用父视图,但不实际附加它。

所以button在你的关卡和播放布局,你正在膨胀这些布局,但它看起来不像你将布局添加到您的主视图/布局。 你真的能看到你正在膨胀的这两种布局吗?

没有明显的原因,为什么这不应该工作。

必须将任何运行时创build的视图添加到您的linearlayout(或任何其他父级布局),使用:

 linearLayoutMain.addView(updateLevel); 

你有没有在你的XML文件中的任何线性布局中使用这个button,即当你达到相应的活动时是否出现这些button?

你应该看到在tbl.addView(updateLevel);的exceptiontbl.addView(updateLevel); ,因为您正试图添加一个父视图已经被指定的视图。

你没有看到这个例外吗?

通货膨胀是asynchronous的方法,你可以尝试添加点击监听器后,它膨胀

  //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); } }); } 

如果你想要项目上的项目值单击只使用.setTag(某些值);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); } }); 

tbl.addView(updateLevel);后试试这个tbl.addView(updateLevel); tbl.getChildAt(0)可能会改变:

 tbl.getChildAt(0).findViewById(R.id.updateLevel).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { updateLevelOnClick(v); } });