Fragment returning Null context

我的梦境 提交于 2019-12-25 17:47:13

问题


I've been trying to fix this for the past 2 hours. Tried a lot of things.

The Fragment seems to be passing a null context to my Adapter. I have tried to initialize the Context variable in onCreate and onCreateView and onActivityCreated. Same result.

Here is my fragment:

    public class ActiveBookingsFragment extends Fragment
{
    Context con;
    ArrayList<Booking> bookings;
    ListView activeBookings_lv;

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

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

        con = this.getActivity();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
    {
        View v =inflater.inflate(R.layout.tab_activebookings,container,false);

        activeBookings_lv = (ListView) v.findViewById(R.id.lv_activebookings);
        bookings = new ArrayList<Booking>();

        Booking b1 = new Booking("Data");
        bookings.add(b1);

        activeBookings_lv.setAdapter(new BookingAdapter(con, bookings));

        return v;
    }
}

And here is the logcat error:

java.lang.NullPointerException
        at android.view.LayoutInflater.from(LayoutInflater.java:212)
        at com.nettechltd.cabeecustomer.CustomAdapters.BookingAdapter.<init>(BookingAdapter.java:26)
        at com.nettechltd.cabeecustomer.ActiveBookingsFragment.onCreateView(ActiveBookingsFragment.java:51)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
        at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490)
        at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1105)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:951)
        at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1473)
        at android.view.View.measure(View.java:17633)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5428)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1413)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:696)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:589)
        at android.view.View.measure(View.java:17633)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5428)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
        at android.view.View.measure(View.java:17633)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5428)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1413)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:696)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:589)
        at android.view.View.measure(View.java:17633)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5428)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:17633)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5428)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1413)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:696)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:589)
        at android.view.View.measure(View.java:17633)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5428)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2588)
        at android.view.View.measure(View.java:17633)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2347)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1439)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1653)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1297)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6773)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
        at android.view.Choreographer.doCallbacks(Choreographer.java:613)
        at android.view.Choreographer.doFrame(Choreographer.java:583)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5748)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
        at com.android.internal.os.ZygoteIn

回答1:


Initialize context in Fragment onAttach(.....) like

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



回答2:


you can call getActivity() at any time to get a context in a fragement

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
    {
        View v =inflater.inflate(R.layout.tab_activebookings,container,false);

        ...

        activeBookings_lv.setAdapter(new BookingAdapter(getActivity(), bookings));

        return v;
    }
}



回答3:


onActivityCreated() is called after onCreateView(). To get context just use getActivity(), don't create another field which references to activity (it may cause memory leak in future).

It you need this field anyway you may initialize it in onAttach().



来源:https://stackoverflow.com/questions/30641515/fragment-returning-null-context

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!