public class MainActivity extends AppCompatActivity {
private static MainActivity mainactivity = null;
public static int Score = 0;
public TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView)findViewById(R.id.tvScore);
text.setText("333333333333333333333333333");
}
public MainActivity() {
mainactivity = this;
}
public static MainActivity getMainActivity() {
return mainactivity;
}
public void show() {
text.setText(Score+"");
}
public void clearScore(){
Score = 0;
show();
}
public void addScore(int s){
Score+=s;
show();
}
}
在GameView中调用clearScore()初始化程序会崩溃去掉MainActivity.getMainActivity().clearScore(); 可以运行但是分数无法显示
private void startGame() {
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
cardsMap[x][y].setNum(0);
}
}
MainActivity.getMainActivity().clearScore();
addRandomNum(); // 开始时先有两个方格有数字
addRandomNum();
}
总之就是调用涉及到分数显示Show()函数的时候 程序崩溃
看你这个错误是不是因为在线程里面去更新UI了?先这样改下,不行,完整的错误贴出来看下
public void show() {
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(Score+"");
}
});
}
程序没加载完,猜测是你的startGame方法没有放在onFinishInflate中调用。onFinishInflate:自定义控件布局初始化完成后自动调用的方法,不是在该方法内,你的activity可能获取到的是空值,activity没初始化完成,你就调用了,这样的话不太合理。最好贴一下完整错误吧,最重要是错误的第一行。