【问题标题】:App crashing when calling setContentView(R.layout.activity_main); for the second time调用 setContentView(R.layout.activity_main); 时应用程序崩溃;第二次
【发布时间】:2019-10-11 08:13:38
【问题描述】:

在我的应用程序中。它首先通过加载一个名为 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 时,应用程序崩溃

【问题讨论】:

  • 你在哪里调用这些函数?
  • 添加你的 logcat。但是为什么用 3 种不同的方法调用 setContentView 呢?
  • 首先它不可能一次又一次地加载相同的视图,您可以重新启动活动以再次加载视图
  • 我建议您在同一个活动中使用片段来加载不同的视图。 developer.android.com/guide/components/fragments
  • 对应的包含onCreate方法的view就是带有setContentView方法的contractor。重新创建活动以上传新视图。这里出现问题的主要原因是你在错误的时间错误的地方调用了setContentView方法。

标签: java android


【解决方案1】:

这是一种不好的做法,如果您想更改视图但保持在同一个活动中,我建议您使用片段来交换两个视图。

理论上应该可以多次setContentview,但它需要你从主线程调用它,这可能是崩溃的原因。但这无关紧要,因为这样做效率非常低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多