Fragment.onCreateView throws a null pointer exception

So, I use fragments and try to connect them to clicks.

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View contentView = inflater.inflate(R.layout.layout1, null);
      //  View contentView=super.onCreateView(inflater,null,savedInstanceState,R.layout.layout1);
        startButton= (Button) getView().findViewById(R.id.button);

This is the XML for the button.

 <Button
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="Start Time"
            android:id="@+id/button"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="28dp"
            android:layout_marginTop="10dp"
            android:background="#1e497c"
            android:textColor="#ffffff"/>

This is my exception.

02-28 16: 49: 57.162 14375-14375 / com.example.listviewandroid E / AndroidRuntime: FATAL

EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.listviewandroid/com.example.listviewandroid.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295)
            at android.app.ActivityThread.access$700(ActivityThread.java:150)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:175)
            at android.app.ActivityThread.main(ActivityThread.java:5279)
            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:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.fragment.Fragment1.onCreateView(Fragment1.java:43)
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
            at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:556)
            at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1181)
            at android.app.Activity.performStart(Activity.java:5293)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295)
            at android.app.ActivityThread.access$700(ActivityThread.java:150)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:175)
            at android.app.ActivityThread.main(ActivityThread.java:5279)
            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:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)

Obviously, he cannot find a button or anything else that I cannot understand. Any help was greatly appreciated.

+4
source share
3 answers

just use this in onCreateView

    View contentView = inflater.inflate(R.layout.layout1, container, false);
    startButton= (Button) contentView.findViewById(R.id.button);
    return contentView;
+6
source

You cannot use getView()it until onCreateView()it returns, since this is the method responsible for creating the specified view. You must change your code to

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View contentView = inflater.inflate(R.layout.layout1, null);
        startButton = (Button) contentView.findViewById(R.id.button);

, , onViewCreated() Button ( getView().

+4

This line does not make sense:

startButton= (Button) getView().findViewById(R.id.button);

You have no idea, you create it anyway.

Instead, you can do this:

 startButton= (Button)contentView.findViewById(R.id.button);

Or wait until the onCreateView method returns the actual view that was just created, and you can get the link to the view using the getView method after onCreateView returns the view.

Hope this helps!

Hello!

+2
source

Source: https://habr.com/ru/post/1529515/


All Articles