【发布时间】:2017-06-28 13:32:44
【问题描述】:
当我启动我的 RecyclerView 片段时,我有这个 NullPointer 异常,但我似乎无法找到为什么它没有存储在我的变量中。
这是我的完整代码:
public class LocationFragment extends Fragment {
FragmentNameFactory nameFactory = new FragmentNameFactory();
List<LocationData> locationData = new ArrayList<>();
LocationRecyclerAdapter locationRecyclerAdapter = new LocationRecyclerAdapter(locationData);
public LocationFragment(){
//Fragment needs a constructor, can be empty
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
((MainActivity) getActivity()).setFragmentName(nameFactory.getNameNL(6));
View view = inflater.inflate(R.layout.flocation, container, false);
locationData.add(new LocationData("a", "a", "a", "b", 4.55555, 3.39023, "e"));
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.locationRecyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(locationRecyclerAdapter);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
locationRecyclerAdapter.notifyDataSetChanged();
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstance){
super.onViewCreated(view, savedInstance);
}
@Override
public void onActivityCreated(Bundle savedInstance){
super.onActivityCreated(savedInstance);
}
}
flocationRecycle.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/locationRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</FrameLayout>
</RelativeLayout>
LocationRecyclerAdapter:
public class LocationRecyclerAdapter extends RecyclerView.Adapter<LocationRecyclerAdapter.LocationViewHolder> {
List<LocationData> locationDataList;
public class LocationViewHolder extends RecyclerView.ViewHolder {
public CardView cardView;
public TextView textViewName;
public LocationViewHolder(View view) {
super(view);
cardView = (CardView) view.findViewById(R.id.card);
textViewName = (TextView) view.findViewById(R.id.text_view_names);
}
}
public LocationRecyclerAdapter(List<LocationData> locationsDataList){
this.locationDataList = locationsDataList;
}
@Override
public LocationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.flocation, parent, false);
LocationViewHolder locationViewHolder = new LocationViewHolder(view);
return locationViewHolder;
}
@Override
public void onBindViewHolder(LocationViewHolder holder, int position) {
holder.textViewName.setText(locationDataList.get(position).getName());
}
@Override
public int getItemCount() {
return locationDataList.size();
}
}
flocation.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="120dp">
<android.support.v7.widget.CardView
android:id="@+id/card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="102dp">
<TextView
android:id="@+id/text_view_names"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"></TextView>
</RelativeLayout>
</android.support.v7.widget.CardView>
</RelativeLayout>
代码在这一行崩溃:recyclerView.setHasFixedSize(true); 带有我上面所说的空指针,但我找不到 recyclerView 为空的原因
【问题讨论】:
-
你不必调用 locationRecyclerAdapter.notifyDataSetChanged();如果适配器没有变化。
标签: java android nullpointerexception