我所有的其他onClick方法都有效,除了我必须给布局充气才能获得按钮!我究竟做错了什么!这是一些代码:
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>
答案 0 :(得分:22)
问题是您添加的视图没有父级,因此无法接收点击事件。目前,您正在使用
对视图进行充气View playv = inflater.inflate(R.layout.level, null);
您需要在第二个参数中放置父视图。
View playv = inflater.inflate(R.layout.level, parentView, false);
这将允许您使用父视图但不实际附加它。
答案 1 :(得分:1)
因此按钮位于您的关卡和播放布局中,并且您正在对这些布局进行充气,但看起来您并未将布局添加到主视图/布局中。你真的能看到你正在膨胀的那两种布局吗?
答案 2 :(得分:0)
没有明显的理由说明为什么这不起作用。
必须将任何运行时创建的视图添加到linearlayout(或任何其他父布局) 使用:
linearLayoutMain.addView(updateLevel);
您是否在xml文件中的任何线性布局中使用了此按钮,即当您到达相应的活动时是否会显示这些按钮?
答案 3 :(得分:0)
您应该在tbl.addView(updateLevel);
看到异常,因为您正在尝试添加其父级已被指定的视图。
你没有看到这个例外吗?
答案 4 :(得分:0)
通胀是异步方法,你可以尝试在其膨胀之后添加点击监听器
//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);
}
});
}
答案 5 :(得分:0)
如果您想在项目上点击项目值,请使用 .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);
}
});
答案 6 :(得分:0)
tbl.addView(updateLevel);
0 tbl.getChildAt(0)
可能会发生变化后尝试此操作:
tbl.getChildAt(0).findViewById(R.id.updateLevel).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
updateLevelOnClick(v);
}
});