【问题标题】:How to set setContentView in another method?如何在另一种方法中设置 setContentView?
【发布时间】:2016-07-13 20:00:49
【问题描述】:

我有一个带有

的 activity_main.xml
tools:context="com.example.android.newwine.MainActivity"

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="goToNext"/>

在我的 MainActivity.java 文件中

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void gaNaarNext(View view){
    setContentView(R.layout.activity_main2);
}

我有一个 activity_main2.xml 文件

tools:context="com.example.android.newwine.MainActivity"

当我接下来触摸按钮时,activity_main2.xml 将用作 ContentView,所以这是正确的,但是当我在我的 activity_main2.xml 文件中执行任何操作时(比如触摸 RadioButton 或做什么都无所谓)调用一个方法,它说:“新酒已停止。”无论我做什么调用方法,应用程序都会崩溃。我尝试了很多,如果我要在这里粘贴我尝试过的所有内容,这将是一个很长很长的问题:)。

但是有人回答吗?我现在真的不知道该怎么办,所以我想;让我们在 Stackoverflow 上问一些问题。已经谢谢了!

【问题讨论】:

  • 你让我很困惑。你得到的例外是什么?我假设这是一个空指针异常。不要使用未实例化的小部件。
  • 能否提供logcat。

标签: java android xml methods setcontentview


【解决方案1】:

您可能更喜欢使用另一个活动或fragments 来更改您的 UI,因为不建议多次使用方法 setContentView(),因为涉及到所有绘图。

由于您似乎不想切换活动片段可能是最容易使用的。

This stackoverflow question 地址也很重要。

【讨论】:

    【解决方案2】:

    更改内容视图后,屏幕上的 UI 元素已更改。您之前设置的所有变量现在都指向旧屏幕 - 不再存在。更改内容视图后,必须将这些变量设置为该布局文件上的正确元素。此外,您可能想查看 Carlos Sifuentes 所说的 Fragments。

    【讨论】:

      【解决方案3】:

      然后当我在我的activity_main2.xml 文件中做任何事情(比如触摸RadioButton 或做什么都无所谓) 调用方法时,它会说:“New Wine is stopped.”无论我做什么调用方法, app crashes

      问题是您使用了activity_main2.xml,但您没有得到RadioButtonactivity_main2.xmlreference。在使用setContentView() 设置新布局后,您应该获得所有视图reference,然后根据您的需要使用。

      更新您的gaNaarNext() 方法如下:

      public void gaNaarNext(View view){
          setContentView(R.layout.activity_main2);
      
          // For example: If your activity_main2 contains radio_button then do this
          RadioButton radioButton = (RadioButton) findViewById(R.id.radio_button);
      
          radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
              @Override
              public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                  // Do something
              }
          });
      }
      

      希望对你有帮助~

      【讨论】:

        猜你喜欢
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        相关资源
        最近更新 更多