android - 使用 fragment 导致崩溃

标签 android android-fragments

我一直在努力创建我能做的最简单的项目,这给我带来了问题。我最初认为这是一个 map 问题,直到我意识到它可能是一个一般的(支持库?) fragment 问题。 (我试过在我的 SGII v4.1.2 上运行这段代码)

Java代码:

package com.example.testapp;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MSMap extends FragmentActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_msmap);
  }
}

XML 布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    >
    <fragment        
        android:id="@+id/themap"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         />
</RelativeLayout>

上面用“error inflatting”给出了这个错误:

03-09 12:06:56.850: E/AndroidRuntime(891): FATAL EXCEPTION: main 03-09 12:06:56.850: E/AndroidRuntime(891): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testapp/com.example.testapp.MSMap}: android.view.InflateException: Binary XML file line #9: Error inflating class fragment 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.access$700(ActivityThread.java:140) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.os.Handler.dispatchMessage(Handler.java:99) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.os.Looper.loop(Looper.java:137) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.main(ActivityThread.java:4921) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.reflect.Method.invokeNative(Native Method) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.reflect.Method.invoke(Method.java:511) 03-09 12:06:56.850: E/AndroidRuntime(891): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 03-09 12:06:56.850: E/AndroidRuntime(891): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 03-09 12:06:56.850: E/AndroidRuntime(891): at dalvik.system.NativeStart.main(Native Method) 03-09 12:06:56.850: E/AndroidRuntime(891): Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class fragment 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 03-09 12:06:56.850: E/AndroidRuntime(891): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:313) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.Activity.setContentView(Activity.java:1924) 03-09 12:06:56.850: E/AndroidRuntime(891): at com.example.testapp.MSMap.onCreate(MSMap.java:23) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.Activity.performCreate(Activity.java:5206) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 11 more 03-09 12:06:56.850: E/AndroidRuntime(891): Caused by: java.lang.NullPointerException: name == null 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.VMClassLoader.findLoadedClass(Native Method) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:354) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.ClassLoader.loadClass(ClassLoader.java:491) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.support.v4.app.Fragment.instantiate(Fragment.java:391) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.support.v4.app.Fragment.instantiate(Fragment.java:369) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 21 more

代码和 XML 之间是否存在某种不匹配?

  • 我试过让我的代码扩展 Activity 和 FragmentActivity 吗?
  • XML 包含 fragment 周围的相关布局?那是一个 问题不知何故?

在任何情况下,我都尝试了所有我能想到的例子和/或谷歌我的方式。所有这些都会导致相同的错误。

注意:我在“References Libraries”和“Android Dependencies”和“Libs”中有 android-support-v4.jar 在我的项目中。

最佳答案

你的问题终于有了答案

fragment 的工作方式与 Activity 非常相似,因为您需要一个 Java 类文件来配合它。您不能仅通过创建 fragment 布局来创建 fragment - 您需要为 fragment 创建一个类:

为您的 Activity 创建布局 XML 和 Activity 子类 为 fragment 创建布局 XML 和 fragment 子类 将两者结合在您的 Activity 布局 XML 中(或者如果您想在 Java 代码中使用,则使用 FragmentTransaction) 如果您还没有这样做,请阅读、重新阅读并消化此页面上的所有内容:http://developer.android.com/guide/topics/fundamentals/fragments.html

内容很多,但 Fragments 现在是 Android 应用程序的重要组成部分,因此需要阅读。好消息是 fragment 的基础非常简单。

所以你需要有这样一个类

<fragment
       class="com.exercise.FragmentTest.MyFragment"

关于android - 使用 fragment 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15310082/

相关文章:

android - 应用程序中的生物识别身份验证和 oauth2

java - 如何控制 Android 虚拟机?

Android - 如何打开接收分块响应的持久 HTTP 连接?

android - 停止 HttpURLConnection 连接

java - 当设备处于飞行模式时我的应用程序崩溃

java - 如何从 managedQuery 过渡到 LoaderManager/CursorLoader?

android - 带有 Activity 的 ViewPager 和 Fragment 生命周期

android - 如何在不改变( strip )的情况下在 Android 中添加 PNG 图像作为背景?

android - 在 fragment 之间发送数据的最佳方式是什么? ViewModel 或目标参数?

android - 在 fragment 的布局中制作一列按钮