getView returning null when fragment has been created from an activity

◇◆丶佛笑我妖孽 提交于 2019-11-26 14:36:49
Jason Robinson

Move your method call to be executed during onCreateView, and use the view you are inflating for reference instead of getView(). See the fragment lifecycle for more information: https://developer.android.com/guide/components/fragments.html#Creating

and the documentation of getView() that explains why it returns null before onCreateView(LayoutInflater, ViewGroup, Bundle) returns:

getView() Get the root view for the fragment's layout (the one returned by onCreateView(LayoutInflater, ViewGroup, Bundle)), if provided.

https://developer.android.com/reference/android/app/Fragment.html#getView()

spaceMonkey

Moving the method to onCreateView() did not help me.so... Create a global variable mView

 protected View mView;

and in onCreateView()

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.d(TAG, "oncreateView");
        super.onCreateView(inflater, container, savedInstanceState);

        View view = inflater.inflate(R.layout.activity_secure_cloud_drive_folder, container, false);
        this.mView = view;
        return view;
}

and the replace all your getView() with mView

Joaquin Iurchuk

You can fix that by putting your code inside the onViewCreated()-method, which you should override. Don't forget to call super() on it.

Anibal Itriago

You must check the Android Lifecycle to understand WHY is it null on onAttach(...) function.

The first function called when fragment is created is added is onAttach(), but actually no view has been created. That's why null is returned when you try to access within this call.

Next function is onCreate()... but there is no view created yet!!!!

The third function called is onCreateView(), and it's here where you have to indicate which is the view attached to this fragment.... And it's only from this call where a view object exists and can be accessed.

Read and learn the full lifecycle here.

Greetings

Jack Shen

Because onCreate() is called before onCreateView() , whether you inflate a view in onCreateView() or not, you'll get nothing through getView() in onCreate(), because in that time , onCreate() has not been called yet .

it becomes null basically because you call getview() before the view being inflated. Create a View object and fill using inflaterand then find your UI element see code below

  View view = inflater.inflate(R.layout.fragment_albumslist, container, false);
        TextView t= (TextView)view.findViewById(R.id.txtTest);
        t.setText(strtext);
        return view;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!