为什么我的应用程序会因 RecyclerView 而崩溃?
Why is my app Crashing with RecyclerView?
我正在我的 android 工作室项目中使用回收方法,但我遇到了问题。
每次我尝试 findViewById
我的应用程序都会崩溃。
Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
我不明白为什么,因为我正在以好的方式创建我的视图。
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_carrito, container, false);
return view;
}
我正在努力继续
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
...
Log.e("test : ",Integer.toString(R.id.recyclerBuy));
recyView = view.findViewById(R.id.recyclerBuy);
/* recyView.setLayoutManager(new GridLayoutManager(getContext(),RecyclerView.VERTICAL));
recyView.setAdapter(buyAdapter);
*/
}
但我在 recyView = view.findViewById(R.id.recyclerBuy);
行崩溃了。我的R.id.recyclerBuy不为空
这是我的 RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ui.carrito.CarritoFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerBuy"
android:layout_width="match_parent"
android:layout_height="550dp"
android:layout_marginBottom="88dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
...
</androidx.constraintlayout.widget.ConstraintLayout>
有人知道为什么我每次都崩溃吗?
发生这种情况是因为在 onCreateView()
.
之前调用了 onAttach()
回调
解决此问题的最简单方法是将代码放在您在 onCreateView()
中找到 RecyclerView
的位置。类似于:
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_carrito, container, false);
recyView = view.findViewById(R.id.recyclerBuy);
// here you recyView won't be null
return view;
}
一篇关于片段生命周期的好文章:https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-iii-fragments-afc87d4f37fd
我正在我的 android 工作室项目中使用回收方法,但我遇到了问题。
每次我尝试 findViewById
我的应用程序都会崩溃。
Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
我不明白为什么,因为我正在以好的方式创建我的视图。
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_carrito, container, false);
return view;
}
我正在努力继续
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
...
Log.e("test : ",Integer.toString(R.id.recyclerBuy));
recyView = view.findViewById(R.id.recyclerBuy);
/* recyView.setLayoutManager(new GridLayoutManager(getContext(),RecyclerView.VERTICAL));
recyView.setAdapter(buyAdapter);
*/
}
但我在 recyView = view.findViewById(R.id.recyclerBuy);
行崩溃了。我的R.id.recyclerBuy不为空
这是我的 RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ui.carrito.CarritoFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerBuy"
android:layout_width="match_parent"
android:layout_height="550dp"
android:layout_marginBottom="88dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
...
</androidx.constraintlayout.widget.ConstraintLayout>
有人知道为什么我每次都崩溃吗?
发生这种情况是因为在 onCreateView()
.
onAttach()
回调
解决此问题的最简单方法是将代码放在您在 onCreateView()
中找到 RecyclerView
的位置。类似于:
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_carrito, container, false);
recyView = view.findViewById(R.id.recyclerBuy);
// here you recyView won't be null
return view;
}
一篇关于片段生命周期的好文章:https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-iii-fragments-afc87d4f37fd