findviewbyid возвращает значение null во фрагменте, даже если представление правильно раздуто

Я знаю, что таких случаев много, но моя проблема в том, что я все сделал правильно (насколько я знаю), но метод findviewbyid по-прежнему возвращает ноль

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

Это трассировка стека

rootView = (RelativeLayout) inflater.inflate(R.layout.activity_maps, container, false);

if (container == null) {
    return null;
}


mFloatingActionButton = (FloatingActionButton) rootView.findViewById(R.id.fab);
Logoutbutton = (Button) rootView.findViewById(R.id.button);


Logoutbutton.setOnClickListener(this);
mFloatingActionButton.setOnClickListener(this);


return rootView;}

.setonclicklistener выдает ошибку, так как кнопки являются нулевыми

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    tools:context=".Fragments.MapsFragment">

<com.google.android.gms.maps.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="30dp"
        android:clickable="true"
        android:src="@drawable/ic_camera_alt_black_24dp"
        android:layout_gravity="end|bottom"
      />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Log Out"
        android:id="@+id/button"
        android:layout_marginTop="17dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="17dp" />

</com.google.android.gms.maps.MapView>
</RelativeLayout>

и это кнопки

E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                                             at com.example.sanchez.worldgramproject.Fragments.MapsFragment.onViewCreated(MapsFragment.java:224)
                                                                                             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1315)
                                                                                             at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)
                                                                                             at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)
                                                                                             at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
                                                                                             at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1998)
                                                                                             at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:709)
                                                                                             at android.os.Handler.handleCallback(Handler.java:739)
                                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                             at android.os.Looper.loop(Looper.java:158)
                                                                                             at android.app.ActivityThread.main(ActivityThread.java:7229)
                                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
01-31 21:33:00.746 14460-14939/com.example.sanchez.worldgramproject I/qtaguid: Tagging socket 91 with tag 3000110100000000{805310721,0} uid -1, pid: 14460, getuid(): 10248
01-31 21:33:00.876 14460-14939/com.example.sanchez.worldgramproject I/qtaguid: Untagging socket 77
01-31 21:33:00.966 14460-14460/com.example.sanchez.worldgramproject E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                      Process: com.example.sanchez.worldgramproject, PID: 14460
                                                                                      java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                                          at com.example.sanchez.worldgramproject.Fragments.MapsFragment.onViewCreated(MapsFragment.java:224)
                                                                                          at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1315)
                                                                                          at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)
                                                                                          at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)
                                                                                          at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
                                                                                          at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1998)
                                                                                          at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:709)
                                                                                          at android.os.Handler.handleCallback(Handler.java:739)
                                                                                          at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                          at android.os.Looper.loop(Looper.java:158)
                                                                                          at android.app.ActivityThread.main(ActivityThread.java:7229)
                                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

это трассировка стека.

РЕДАКТИРОВАТЬ!

Проблема была найдена. Это не сработало, потому что кнопки не обязательно находятся под корневым представлением "RelativeLayout", но под корневым представлением "MapsView". Поскольку я раздувал относительное расположение, по какой-то причине он не мог раздуть кнопки.

1 ответ

Решение

Вы вызываете super.onCreate в onCreateView. Это совершенно разные методы, и определенно не правильные. (Вы также не должны вызывать super.onCreateView)

Почему контейнер не может быть нулевым? Любая конкретная причина? Я никогда не видел эту логику раньше, и не знаю, что это поможет (скорее всего, ничего).

Этот код будет работать:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = (RelativeLayout) inflater.inflate(R.layout.activity_maps, container, false);

    mFloatingActionButton = (FloatingActionButton) rootView.findViewById(R.id.fab);
    Logoutbutton = (Button) rootView.findViewById(R.id.button);

    Logoutbutton.setOnClickListener(this);
    mFloatingActionButton.setOnClickListener(this);

    return rootView;
}

РЕДАКТИРОВАТЬ:

Попробуйте прочитать стековую трассировку, которую вы разместили.

Эта строка ясно говорит обо всем:

com.example.sanchez.worldgramproject.Fragments.MapsFragment.onViewCreated(MapsFragment.java:224)

Ваш код падает в методе "onViewCreated", а не в "onCreateView" (опять же, разные методы).
У него даже есть определенный номер строки в коде для справки.

Попробуйте опубликовать свой код класса FULL Fragment, вам очень трудно помочь, если вы дадите только частичные данные.

Другие вопросы по тегам