我一直在努力创建我能做的最简单的项目,这给我带来了问题。我最初认为这是一个 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/