片段中的Android getSupportFragmentManager NULL指针异常 [英] Android getSupportFragmentManager NULL pointer exception in Fragment

查看:74
本文介绍了片段中的Android getSupportFragmentManager NULL指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在单击导航抽屉项后使用TabBar和View Pager显示新片段.

i'm trying to display new fragment with TabBar and View Pager after click on the Navigation drawer item.

问题是新创建的Fragment导致

Problem is that newly created Fragment is causing NULL pointer exception on

viewPager.setAdapter(mAdapter);

我在Fragment中的选项卡上停留在可滑动查看的视图上了几个小时,但是没有运气,有人可以帮我解决这个问题吗?

I'm stucked on swipeable-views with tabs in Fragment a several hours but without luck, can somebody helps me with this problem please?

对于可滑动查看,我遵循了本教程:

For swipable views i followed this tutorial:

http://www.androidhive .info/2013/10/android-tab-layout-with-swipeable-views-1/

片段的代码在这里:

import android.app.ActionBar;
import android.support.v4.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import eu.com.mycompany.adapter.TabsPagerAdapter;

public class Fragment_AboutApplication extends Fragment implements ActionBar.TabListener {

    public Fragment_AboutApplication(){}
    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    // Tab titles
    private String[] tabs = { "Top Rated", "Games", "Movies" };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_about_app, container, false);


        // Initilization
        viewPager = (ViewPager) getActivity().findViewById(R.id.pager);
        actionBar = getActivity().getActionBar();
        mAdapter = new TabsPagerAdapter(getActivity().getSupportFragmentManager());

        /*HERE IS THROWED NULL POINTER EXCEPTION*/ 
        viewPager.setAdapter(mAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


        // Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name)
                    .setTabListener(this));
        }
        return rootView;
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    }
}

类TabPagerAdapter:

public class TabsPagerAdapter extends FragmentPagerAdapter {

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
            case 0:
                // Top Rated fragment activity
                return new Fragment_TopRated();
            case 1:
                // Games fragment activity
                return new Fragment_TopRated();
            case 2:
                // Movies fragment activity
                return new Fragment_TopRated();
        }

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 3;
    }

}

使用View Pager的主要片段布局

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

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v4.view.ViewPager>

    <TextView
        android:id="@+id/txtLabel"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="16dp"
        android:text="Settings"/>

    <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtLabel"
        android:src="@drawable/ic_communities"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"/>    

</RelativeLayout>

例外是:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
                at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
                at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
                at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:450)
                at android.os.Handler.handleCallback(Handler.java:725)
                at android.os.Handler.dispatchMessage(Handler.java:92)
                at android.os.Looper.loop(Looper.java:153)
                at android.app.ActivityThread.main(ActivityThread.java:5330)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
                at dalvik.system.NativeStart.main(Native Method)

推荐答案

更改:

mAdapter = new TabsPagerAdapter(getActivity().getSupportFragmentManager())

收件人:

 mAdapter = new TabsPagerAdapter(getChildFragmentManager())

在另一个片段中使用片段时,必须使用ChildFragmentManager而不是FragmentManager.

when you are using fragment inside another fragment you must use ChildFragmentManager not FragmentManager.

这篇关于片段中的Android getSupportFragmentManager NULL指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆