【问题标题】:Use my layout resource file in MainActivity在 MainActivity 中使用我的布局资源文件
【发布时间】:2015-11-08 20:38:18
【问题描述】:

我正在学习“Apps entwickeln mit Android Studio 5”教程,该教程引导我通过New > Layout resource file 创建自己的布局资源文件,然后我给它一个文件名scroll_design 和一个根元素ScrollView

我在 XML 编辑器/设计编辑器中使用我喜欢的小部件创建我想要的布局。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="My custom Layout File"
        android:id="@+id/textView2"
        android:layout_gravity="center_horizontal"
        android:layout_margin="32sp" />
</LinearLayout>

然后教程告诉我转到 MainActivity 并更改代码中的布局,但是当我这样做时:将 setContentView(R.layout.activity_main); 更改为 setContentView(R.layout.scroll_design); 并使用 API21 启动我的模拟器,它会使我的应用程序崩溃,并显示“已停止工作”和一些错误行,直到我将布局改回 activity_main.xml

那么我怎样才能将我新创建的 xml 布局连接到我的项目中呢?

Logcat:

11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime: FATAL EXCEPTION: main
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime: Process: de.myworkplace.layouts2, PID: 25776
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{de.myworkplace.layouts2/de.myworkplace.layouts2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:144)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5221)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:100)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:93)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.support.v7.internal.app.ToolbarActionBar.<init>(ToolbarActionBar.java:78)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:206)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:99)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at de.myworkplace.layouts2.MainActivity.onCreate(MainActivity.java:19)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5937)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:144) 
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135) 
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5221) 
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method) 
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372) 
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
11-08 20:31:25.187 25776-25776/de.myworkplace.layouts2 E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
11-08 20:31:25.191 1230-1600/system_process W/ActivityManager:   Force finishing activity de.myworkplace.layouts2/.MainActivity

【问题讨论】:

  • 问题出在您的 Java 文件中。请在#onCreate() 中发布您正在做的事情,但我相信您引用了一些存在于activity_main.xml 但不存在于scroll_design.xml 中的ActionBar。你的错误是:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference.
  • 确实是问题所在,scroll_design 中缺少操作栏实现,这就是它全部崩溃的原因。
  • 好的,我会添加它作为答案。

标签: java xml android-studio


【解决方案1】:

问题的根源在于您的 Java 文件。

您正在引用一个存在于activity_main 但不存在于scroll_design 中的ActionBar
检查您的 #onCreate() 方法,getActionBar()getSupportActionBar() 应该在那里。

您的异常消息是:

尝试在空对象引用上调用虚拟方法“java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()”

这是对ActionBar 的引用的NullPointerException

【讨论】:

    【解决方案2】:

    -您是否在 scroll_design 文件中添加了 .xml 扩展名? -尝试将你的 scroll_design.xml 文件放在 res/layout 文件夹中

    【讨论】:

    • 是的,我已经这样做了。我上传了一张图片让你看到:)
    【解决方案3】:

    您有两个选项可以让您在主要活动中制作的内容与滚动设计中的布局一起使用,反之亦然。

    A.) 将 MainActivity.java 中的代码复制并粘贴到 DesignScroll.java 中(最好选择创建新活动来创建已经相互设置的 xml 和 java)然后它将允许您更改 setContentView();setContentView(R.layout.scroll_design);,这样你就有了一个用于滚动设计的java和xml

    B.) 使用 MainActivity.java 中的代码在 activity_main.xml 中创建您的布局,然后转到 scroll_design.xml 并添加 &lt;include layout="@layout/activity_main"/&gt; 这将使您的主要活动布局中的所有内容都显示在您的滚动设计布局中

    【讨论】:

    • 伙计,布局资源和活动名称完全没有连接。这个答案非常具有误导性。
    • 根据我的经验,它们似乎是。生病编辑它以避免混淆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多