java - 调用 setContentView(R.layout.activity_main); 时应用程序崩溃;第二次
问题描述
在我的应用程序中。它首先通过加载一个名为 activity_main.xml 的 .xml 文件开始。然后它将视图更改为一个类(gamedraw)。程序运行后,我希望它加载开始时使用的相同 .xml 文件,但是当我使用 setContentView(R.layout.activity_main); 时它会崩溃;
所以我第一次加载它工作的视图,然后我改变视图,然后在程序结束时我希望它再次加载第一个视图,但它崩溃了
public class MainActivity extends Activity {
//declare class Gamedraw
private GameDraw gameDraw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameDraw = new GameDraw(this, size);
//set view to activity main
setContentView(R.layout.activity_main);
}
public void startGame(View v) {
//set view to gamedraw
setContentView(gameDraw);
}
public void setViewActivity(){
setContentView(R.layout.activity_main); //this line crashes the app
}
}
所以首先它加载: setContentView(R.layout.activity_main);
第二它加载: setContentView(gameDraw);
第三它加载: setContentView(R.layout.activity_main);
第一个和第二个工作完美,但是当它尝试在最后加载 activity_main 时,应用程序崩溃
解决方案
这是不好的做法,如果您想更改视图但保持在同一个活动中,我建议您为您交换的两个视图使用片段。
理论上应该可以多次setContentview,但它需要你从主线程调用它,这可能是崩溃的原因。但这无关紧要,因为这样做效率非常低。
推荐阅读
- mysql - 嵌套 SQL (Hana) 序列
- ios - 如果我使用带屏障的 OS 原子函数写入/交换,在 64 位平台上读取 64 位原子值是否安全?
- javascript - 用于发送电子邮件的 jQuery
- integration-testing - 如何启用 Braintree PayPal 结账的负面测试?
- python - zeep - 禁用警告“强制肥皂:地址位置到 HTTPS”
- reactjs - 如何更改 NativeSelect 的 IconComponent 取决于它是否打开
- regex - 如何仅从 Google 表格单元格中提取日期
- python - 如何从 Pandas DataFrame 的特定列中提取包含特定字符串的所有行号?
- javascript - stripe.customers.createBalanceTransaction 不是函数错误
- c++ - C# 的“?”等价于 C++。空条件运算符