Problem calling an ImageButton from a Toolbar to a Fragment

0

What I'm trying to do is make visible in a Fragment an ImageButton that is contained in a layout toolbar. When doing this same action in a normal Activity does not give me any problem, but doing so in the Fragment gives me an error and picks up the ImageButton as null ...

This is what I want to do:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        final View vista = inflater.inflate(R.layout.fragment_service, container, false);

        btnback = (ImageButton) vista.findViewById(R.id.btnback);
        btnback.setVisibility(View.VISIBLE);
        btnback.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity().finish();
            }
        });

return vista;
}

LogCat:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setVisibility(int)' on a null object reference
                      at com.example.matia.tonum.Fragment.ServiceFragment.onCreateView(ServiceFragment.java:55)
                      at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
                      at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
                      at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
                      at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
                      at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
                      at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
                      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
                      at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5258)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)

I hope you can help me, thank you very much!

    
asked by Matías Nicolás Núñez Rivas 19.06.2018 в 03:05
source

1 answer

0

The problem is that in onCreateView() you just have to create the view and call the findView of the button you want and then use it in onActivityCreated()

to fix it, take this out of onCreateView ();

 btnback.setVisibility(View.VISIBLE);
        btnback.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity().finish();
            }
        });

and you put it in onActivityCreated()

 btnback.setVisibility(View.VISIBLE);
        btnback.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity().finish();
            }
        });

I'll explain to you both

onCreateView ():

After calling onCreate () (in the Fragment), onCreateView () of the Fragment is called. You can assign visualization variables and do any graphical initialization. You are expected to return a View from this method, and this is the main view of the user interface, but if the Fragment does not use any design or graphic, you can return the value null.

onActivityCreated ():

As the name implies, this is called after the onCreate () activity has been completed. It is called after onCreateView () and is mainly used for final initializations (for example, modification of user interface elements).

    
answered by 19.06.2018 в 18:21