【发布时间】:2015-03-10 18:07:24
【问题描述】:
这就是我试图做几个小时的事情: 我有一个 MainActivity.java 文件(下面列出)和一个带有开始按钮的 fragment_start.xml 文件。点击开始按钮应显示带有点/圆形和倒计时文本视图的 activity_main.xml 文件。它不起作用,这就是正在发生的事情:
logcat 告诉我: PID: 1240 java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'
模拟器显示:很遗憾,GAME 已停止。
有必要说我是编程新手吗?
感谢您的建议!
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
private int points;
private int round;
private int countdown;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showStartFragment();
}
private void newGame () {
points=0;
round=1;
initRound();
}
private void initRound() {
countdown = 10;
update();
}
private void update () {
fillTextView(R.id.points, Integer.toString(points));
fillTextView(R.id.round, Integer.toString(round));
fillTextView(R.id.countdown, Integer.toString(countdown * 1000));
}
private void fillTextView (int id, String text) {
TextView tv = (TextView) findViewById(id);
tv.setText(text);
}
private void showStartFragment() {
ViewGroup container = (ViewGroup) findViewById(R.id.container);
container.removeAllViews();
container.addView(
getLayoutInflater().inflate(R.layout.fragment_start, null) );
container.findViewById(R.id.start).setOnClickListener(this);
}
@Override
public void onClick(View view) {
if(view.getId() == R.id.start) {
startGame();
}
}
public void startGame() {
newGame();
}
}
【问题讨论】:
-
发布整个异常消息/logcat 会有所帮助。
-
请发布您的 xml 文件。
-
看我的回答。解释再清楚不过了,但你必须自己追查为什么你给一个错误的 id 作为参数(因为如果存在具有此 ID 的视图,该方法将不会返回 null)
-
当您使用 findViewById 查找 TextView
TextView tv = (TextView) findViewById(id);时,您必须确定您正在查看的布局。如果您正在查看像View theView = inflater.inflate(R.layout.inflatedLayout, null);这样的膨胀布局,您必须指定您正在查看的视图,如TextView tv = (TextView) theView.findViewById(id);
标签: java android nullpointerexception