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, вам очень трудно помочь, если вы дадите только частичные данные.