findViewById 在 运行 方法中返回 null (android)
findViewById is returning null inside run method (android)
出于某种原因,这里的 运行 方法在设置内容视图时没有问题,但是当我尝试从 xml 检索按钮时,它 returns 为 null 并且不允许我来设置 onclick 侦听器。我的代码列在下面。
v.post(new Runnable() {
@Override
public void run() {
setContentView(R.layout.win);
Button submit = (Button) findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
HighScoresHelper scores = new HighScoresHelper("HighScoreV2.txt", GameActivity.this);
scores.addScore("Test", Math.round((frame/FPS) *100)/100.0);
startActivity(new Intent(GameActivity.this, HighScores.class));
finish();
}
});
}
});
是的,拼写和一切都正确并与 xml 匹配,这是 xml 代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="YOU WON!!!, enter in your name and click submit"
android:id="@+id/textView3" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/name" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit"
android:id="@+id/submit"
android:layout_gravity="center_horizontal" />
</LinearLayout>
谢谢
所以,问题是我在内部 class 到 activity 中调用它。我需要做的是膨胀视图并将其保存为全局变量。我在 onCreate 方法中完成了所有这些。
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
winView = inflater.inflate(R.layout.win, null);
submit = (Button) winView.findViewById(R.id.submitScore);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
然后在我的内心 class 我打电话给
v.post(new Runnable() {
@Override
public void run() {
setContentView(winView);
}
});
为了在必要时改变视图,v 是主 class 的 inner-class 实例变量。
澄清一下,main class - "GameActivity" 和 inner-class 被标记为 "OurView"。 v 是 class GameActivity 中 OurView 类型的全局变量。我会 post 整个 class,但它有 300 多行。
出于某种原因,这里的 运行 方法在设置内容视图时没有问题,但是当我尝试从 xml 检索按钮时,它 returns 为 null 并且不允许我来设置 onclick 侦听器。我的代码列在下面。
v.post(new Runnable() {
@Override
public void run() {
setContentView(R.layout.win);
Button submit = (Button) findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
HighScoresHelper scores = new HighScoresHelper("HighScoreV2.txt", GameActivity.this);
scores.addScore("Test", Math.round((frame/FPS) *100)/100.0);
startActivity(new Intent(GameActivity.this, HighScores.class));
finish();
}
});
}
});
是的,拼写和一切都正确并与 xml 匹配,这是 xml 代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="YOU WON!!!, enter in your name and click submit"
android:id="@+id/textView3" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/name" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit"
android:id="@+id/submit"
android:layout_gravity="center_horizontal" />
</LinearLayout>
谢谢
所以,问题是我在内部 class 到 activity 中调用它。我需要做的是膨胀视图并将其保存为全局变量。我在 onCreate 方法中完成了所有这些。
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
winView = inflater.inflate(R.layout.win, null);
submit = (Button) winView.findViewById(R.id.submitScore);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
然后在我的内心 class 我打电话给
v.post(new Runnable() {
@Override
public void run() {
setContentView(winView);
}
});
为了在必要时改变视图,v 是主 class 的 inner-class 实例变量。
澄清一下,main class - "GameActivity" 和 inner-class 被标记为 "OurView"。 v 是 class GameActivity 中 OurView 类型的全局变量。我会 post 整个 class,但它有 300 多行。