Android: Fragment (Trying to instantiate a class that is not a Fragment)

Fragments API: https://developer.android.com/guide/components/fragments.html

第一次使用Fragment遇到一个问题就是:

Trying to instantiate a class xxx that is not a Fragment)

问题来由:

Fragment是Android3.0(API Level 11)才开始引入的,之前的API不能直接使用android.app.Fragment。

就出现了兼容低版本的放在android.support.v4.jar兼容包中的Fragment。

但是通过Activity的布局文件内声明Fragment时,<fragment>节点默认是使用android.app.Fragment中的Fragment。

如果想使用android.support.v4.app.Fragment,需要Activity继承android.support.v4.app.FragmentActivity。

解决方案:

1. 自定义的Fragment需要继承自android.app.Fragment而不是android.support.v4.app.Fragment

这个需要API最低版本也支持Fragment才行;

package com.example.helloservice.fragments;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.helloservice.R;

/**
 * create an instance of this fragment.
 */
public class ExampleFragment extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_example, container, false);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

}

  

2. Activity继承自FragmentActivity而不是Activity

public class ExampleFragment extends android.support.v4.app.Fragment {
    ....
}

public class MainActivity extends android.support.v4.app.FragmentActivity {
   ....
}

xml:
    <fragment
        android:name="com.example.helloservice.fragments.ExampleFragment"
        android:id="@+id/exampleFragment"
        android:tag="@string/hello_blank_fragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="300dp"/>

  

时间: 2024-10-07 15:31:34

Android: Fragment (Trying to instantiate a class that is not a Fragment)的相关文章

Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换

上一篇博文我们介绍了利用ViewPager和Fragment实现顶部滑块左右滑动效果,具体参考(http://blog.csdn.net/a123demi/article/details/39480385). 而本篇博文将实例讲解利用ViewPager实现底部圆点导航左右滑动效果,以及被滑动界面实现监听事件,同时通过Fragment实现页面的切换. 对于该效果的实现,需要实现以下几个问题: 1. 底部圆点加载和实现方法? 2. 怎样实现左右滑动效果? 3. 被滑动页面,怎样实现监听事件? 4.

Fragment的可见再加载的方法(真正的Fragment的OnResume和OnPause)

一 起因 我们在做应用的过程中,一个应用的界面可能是多个Fragment切换而成的,但是如果在每次应用启动的时候就去加载大量的网络数据(假设你的每个Fragment都需要加载网络数据,你也可以理解为初始化大量资源)肯定是不好的,能不能有一种方法可以在我们看到我们的Fragment时再去加载对应的Fragment的数据呢? 当然是有的. 二 解决 Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPage

【Android开发实践】android.view.InflateException: Binary XML file line #12: Error inflating class fragment问题解决

一般出现的原因是fragment引入的包错了,应该是import android.app.ListFragment;而不是import android.support.v4.app.ListFragment;

android异常Unable to instantiate activity ComponentInfo解决方法

本人最近调试一个调试一个程序,jar包都添加好了,程序没有任何错误信息,但是运行到手机,却打印出这样的错误信息: 08-29 20:07:52.584: E/AndroidRuntime(4517): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.zhy.csdndemo/com.zhy.csdndemo.MainActivity}: java.lang.ClassNotFoundExce

Android开发中如何实现外部其他Activity类与指定fragment碎片的相互跳转

先说一下这个问题产生的背景 Activity A中有四个fragment,分别是 a b c d,默认显示的是fragment a.在开发过程中,fragment d中需要和外部Activity进行跳转,将这个外部Activity命名为B吧... 我需要从d中跳转到B中,完成一些设置,然后再从B中的返回按钮回到d.但是使用startActivity()方法的结果是:可以实现从d到B的跳转,但是从B跳到d出现了问题. 网上搜索了一下相关问题的解决方案(博文) 方案一: 要考虑fragment的复用

Android笔记:Fragment与ViewPager组合时,如何在FragmentActicity获取Fragment对象

项目中有一处需要监听宿主的控件,再去更新Fragment页面,由此必须去获取Fragment里的对象; 在FragmentActivity + Fragment组合里是可以使用以下方案: MedicFragment Medic= (MedicFragment ) getSupportFragmentManager().findFragmentById(R.id.fragment_medic); 但是在ViewPager里是获取不了Fragment的对象,经过资料查才找,在这里找到了答案:http

Fragment(10)FragmentTransaction.add(id,Fragment)报错: No view found for id 0x****** for fragment

1.错误信息: 06-26 22:54:28.509: E/AndroidRuntime(20363): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.exe.custommenu/com.exe.custommenu.MainActivity}: java.lang.IllegalArgumentException: No view found for id 0xaabbcc for fragmen

当在Fragment中使用startActivityForResult()方法打开一个Activity,但是这个Fragment的onActivityResult方法不执行

注意Fragment使用startActivityForResult()方法打开一个Activity,并需要这个Activity销毁时通过onActivityResult()传递数据给打开他的Fragment.一般是没有问题的,但是如果这个Fragment依附的那个FragmentActivity也重写了onActivityResult()方法,那么这个Fragment的onActivityResult()方法就获取不到数据了(被那个依附的FragmentActivity接受了),这时候我们只需

两个fragment 同时跳转另外一个fargment ,返回对应的fragment 的解决方法

安卓app主页面为 FragmentActivity,其余页面为fragmnet页面. 主页面  底部导航栏 三个按钮. 点击三个按钮分别跳转不同的  frgment .如果  点击这个三个按钮时,其中两个或者三个再者一个 ,  需要 判断  用户是否登录,(当然跳转的登录页面也是  frgment页面).那么 跳转到登录页面  ,登录成功后 如何返回 主页面  按钮 对应的 fragment  呢? 这里为大家讲解一下  解决方案!当然这仅仅是针对于  本人项目的解决 方法.不过可能对你  有