我正在尝试使用向后兼容包和SDK级别10来扩展包含Fragment的布局。我将jar文件放在项目的libs文件夹中。我扩展了FragmentActivity。
当我在XLarge屏幕设备上以API级别11运行时,这一切都非常有效。
当我退回到针对10级进行编译并在正常大小的屏幕上运行时,我会在创建新活动并使其中的片段膨胀时失败。
引起: 抛出java.lang.ClassNotFoundException: 加载器中的android.view.fragment dalvik.system.PathClassLoader [/data/app/com.motoappsummitagenda-1.apk] 04-01 01:07:14.311 2870 2870 E. AndroidRuntime:at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
所以它看起来像什么,某处正在寻找android.view.fragment,而不是兼容版本android.support.v4.app.Fragment。当然,在API级别10上找不到android.view.fragment。但是android.view.fragment来自哪里?
正在膨胀的XML是
<?xml version="1.0" encoding="utf-8"?>
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.motorapp.SessionFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/sessionfragment">
</fragment>
它的代码开始:
package com.motorapp;
import java.util.List;
import java.util.ListIterator;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.support.v4.app.*;
import android.support.v4.util.*;
import android.support.v4.*;
import android.support.v4.widget.*;
public class SessionFragment extends android.support.v4.app.Fragment {
症状类似于这个问题,但我没有这些错误 inflating fragments with compatibility package android
android.compatibility.v4.android-support-v4 jar文件位于Eclipse的构建路径中 在项目&gt;下属性&gt; Java构建路径
我在清单中(我尝试过不同的名称变体)。
在开始使用片段时,我首先在蜂窝设备上使用了API 11,这一切都完美无缺。它是使用兼容性库来获取相同的代码(修改为使用稍微不同的兼容性API),我有这个问题。任何想法都会非常受欢迎。谢谢, 彼得
答案 0 :(得分:41)
我刚刚在Android API 8机器(三星Galaxy S)中解决了这个问题。
请将Activity
课程更改为FragmentActivity
。
public class FragmentLayout extends Activity {}
- &GT;
public class FragmentLayout extends FragmentActivity {}
public static class DetailsActivity extends Activity {}
- &GT;
public static class DetailsActivity extends FragmentActivity {}
最后
getFragmentManager()
- &gt; getSupportFragmentManager()
将android-support-v4.jar注册到Eclipse的引用库
将android-support-v4.jar放到{项目的根目录} / libs目录
从simple_list_item_activated_1更改为API 10枚举(例如:simple_list_item_1)
import android.support.v4.app.Fragment;
答案 1 :(得分:15)
我在兼容性库中遇到了同样错误的类问题,并尝试了上面提到的所有内容而没有运气。我终于明白了:我使用的是不正确的XML元素Fragment
而不是更正一个fragment
。资本化似乎很重要。
答案 2 :(得分:7)
我打赌你试图在setConetentView
super.onCreate
之前致电FragmentActivity
答案 3 :(得分:2)
我在预蜂窝设备上运行的应用程序确实遇到了这个问题。我根据Dianne Hackborn的February 2011 blog post和其他标准Fragment参考资料中给出的示例编写了Fragment编码。问题的解决方案包含在SDK参考链接http://developer.android.com/sdk/compatibility-library.html#Using中。当要使用兼容性库部署这些应用程序时,必须在具有Fragments的应用程序中使用的类和方法名称存在细微差别。该链接解释了这一点。
下载和安装的兼容性库包含使用Fragments的示例代码。参考:Android Developers > Resources > Sample Code > API 4+ Support Demos
答案 4 :(得分:1)
您提供的导入看起来都是正确的。请仔细检查任何其他类,以确保Eclipse没有自动导入错误的片段。另一个关键是您需要将兼容性库添加到lib \中,您必须在项目的根目录中创建它,以确保它与您的应用程序捆绑在一起。我不知道是否需要,但我总是让我的项目构建路径参考它的副本。
您的布局似乎缺少class参数。我认为你的意思是使用你在布局中使用过名字的类。
<fragment class="com.example.<class to path to your fragment>" android:id="@+id/items"
android:layout_weight="1" android:layout_width="0px"
android:layout_height="fill_parent" />
在Eclipse中,您应该在Referenced Libraries和libs下看到android-support-v4.jar。
答案 5 :(得分:0)
我认为你应该从构建路径中删除android-support-v4.jar。这将从Eclipse中的引用库中删除它。比creace文件夹libs并把jar放在那里。清理项目,Eclipse会将jar添加到Android依赖项中。这对我来说很有把戏,因为我正在努力解决未被发现的课程。
答案 6 :(得分:0)
我得到了
java.lang.NoClassDefFoundError: com.android.example.SupportFragment
at com.android.example.SupportFragmentActivity.onCreate()
在
SupportFragment extends SherlockFragment implements PopupMenu.OnMenuItemClickListener
...
@Override
public boolean onMenuItemClick(android.view.MenuItem item) {
return onOptionsItemSelected(item);
}
当尝试使api 17应用程序与api 8兼容时,唯一的指示是上面的logcat错误,因此如果出现此错误,请检查是否支持所有导入的类。