3

我一直在努力创建最简单的项目,这会导致我遇到问题。我最初认为这是一个地图问题,直到我意识到这可能是一个一般的(支持库?)片段问题。(我尝试在我的 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>

上面用“错误膨胀”给出了这个错误:

03-09 12:06:56.850: E/AndroidRuntime(891): 致命异常: main 03-09 12:06:56.850: E/AndroidRuntime(891): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com. example.testapp/com.example.testapp.MSMap}:android.view.InflateException:二进制 XML 文件第 9 行:膨胀类片段时出错 03-09 12:06:56.850:E/AndroidRuntime(891):在 android.app .ActivityThread.performLaunchActivity(ActivityThread.java:2110) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 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):在 android.os.Handler.dispatchMessage(Handler.java:99) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.os.Looper.loop(Looper.java:137) 03-09 12 :06:56.850:E / AndroidRuntime(891):在android.app.ActivityThread.main(ActivityThread.java:4921)03-09 12:06:56.850:E / AndroidRuntime(891):在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): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 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 /Android 运行时(891):引起:android.view.InflateException:二进制 XML 文件第 9 行:膨胀类片段时出错 03-09 12:06:56.850:E/AndroidRuntime(891):在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704 ) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android .view.LayoutInflater.inflate(LayoutInflater.java:489) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 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):在 android.app.Activity.setContentView(Activity.java:1924) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 com.example.testapp.MSMap.onCreate(MSMap.java:23) 03- 09 12:06:56.850: E/AndroidRuntime(891): 在 android.app.Activity.performCreate(Activity.java:5206) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.app。 Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 11 更多 03-09 12:06:56.850: E/AndroidRuntime(891): 由: java.lang.NullPointerException: name == null 03-09 12:06:56.850: E/AndroidRuntime(891): 在 java.lang.VMClassLoader.findLoadedClass(Native Method) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 java.lang。ClassLoader.findLoadedClass(ClassLoader.java:354) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:491) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:461) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate (Fragment.java:391) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate(Fragment.java:369) 03-09 12:06:56.850 : E/AndroidRuntime(891): 在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.view.LayoutInflater。 createViewFromTag(LayoutInflater.java:676) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 21 更多354) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:491) 03-09 12:06:56.850: E/AndroidRuntime(891): 在java.lang.ClassLoader.loadClass(ClassLoader.java:461) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate(Fragment.java:391) 03 -09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate(Fragment.java:369) 03-09 12:06:56.850: E/AndroidRuntime(891):在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 21 更多354) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:491) 03-09 12:06:56.850: E/AndroidRuntime(891): 在java.lang.ClassLoader.loadClass(ClassLoader.java:461) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate(Fragment.java:391) 03 -09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate(Fragment.java:369) 03-09 12:06:56.850: E/AndroidRuntime(891):在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 21 更多491) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:461) 03-09 12:06:56.850: E/AndroidRuntime(891): 在android.support.v4.app.Fragment.instantiate(Fragment.java:391) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate(Fragment.java :369) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 03-09 12:06:56.850: E/AndroidRuntime (891): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 21 更多491) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:461) 03-09 12:06:56.850: E/AndroidRuntime(891): 在android.support.v4.app.Fragment.instantiate(Fragment.java:391) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate(Fragment.java :369) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 03-09 12:06:56.850: E/AndroidRuntime (891): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 21 更多391) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate(Fragment.java:369) 03-09 12:06:56.850: E/AndroidRuntime( 891): 在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java :676) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 21 更多391) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.support.v4.app.Fragment.instantiate(Fragment.java:369) 03-09 12:06:56.850: E/AndroidRuntime( 891): 在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 03-09 12:06:56.850: E/AndroidRuntime(891): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java :676) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 21 更多还有 21 个还有 21 个

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

  • 我试过让我的代码扩展活动和片段活动吗?
  • XML 包含围绕片段的相对布局?这是一个问题吗?

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

注意:我的项目中的“参考库”和“Android 依赖项”和“库”中有 android-support-v4.jar。

4

2 回答 2

3

最后我得到了你的问题的答案

片段的工作方式很像活动,因为您需要一个 Java 类文件来配合它。您不能仅通过创建片段布局来创建片段 - 您需要为片段创建一个类:

为您的活动创建一个布局 XML 和一个 Activity 子类 为您的片段创建一个布局 XML 和一个 Fragment 子类 在您的 Activity 布局 XML 中将两者联系在一起(或者如果您想在 Java 代码中使用 FragmentTransaction)如果您还没有已经这样做了,阅读、重新阅读和消化此页面上的所有内容:http: //developer.android.com/guide/topics/fundamentals/fragments.html

那里有很多,但 Fragments 现在是 Android 应用程序的重要组成部分,所以它是必读的。好消息是片段的基础非常简单。

所以你需要有这样的课程

<fragment
       class="com.exercise.FragmentTest.MyFragment"
于 2013-03-09T11:25:24.337 回答
2

您没有为您的 Fragment 指定名称,您应该在您的片段的名称属性中提供您的片段类

像下面的代码:

<fragment        
    android:name="com.yourPackageName.YourFragmentClass" 
    android:id="@+id/themap"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     />
于 2013-03-09T11:25:08.200 回答