Failed to call RecyclerView adapter methods

I have this strange problem with my adapter due to which no methods are called. The constructor works, it stops there if I have a breakpoint, but there is nothing from there. onCreateViewHolder not called either onBindViewHolder or even getItemCount .. I tried everything I could find on the Internet, but nothing works, so I don’t know what to do. Any suggestions? Here is my code: Fragment:

 public class FragmentPackageDetails extends Fragment { //other vars RecyclerView rvPackageDetails; DatabaseHandler database; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Bundle args = getArguments(); String temp = args.getString(KEY_TRACKER_CODE); View v = inflater.inflate(R.layout.fragment_package_details_new, container, false); return v; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); rvPackageDetails = (RecyclerView) view.findViewById(R.id.rvPackageDetails); rvPackageDetails.setLayoutManager(new LinearLayoutManager(getActivity())); database = new DatabaseHandler(getActivity()); selectedPackage = database.getPackage(trackerCode); RecyclerView.Adapter adapter = new MyAdapter(selectedPackage.getRecords()); rvPackageDetails.setAdapter(adapter); } //other methods in class } 

Myadapter

 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private ArrayList<TrackingRecordCheckedOut> mDataset; // Provide a reference to the views for each data item // Complex data items may need more than one view per item, and // you provide access to all the views for a data item in a view holder public class ViewHolder extends RecyclerView.ViewHolder { // each data item is just a string in this case public TextView tvPackageDetailsRowDayOfWeek, tvPackageDetailsRowDayOfMonth, tvPackageDetailsRowNameOfMonth, tvPackageDetailsRowDetailsTitle, tvPackageDetailsRowDetailsDescription, tvPackageDetailsRowDetialsTime; public ViewHolder(View v) { super(v); tvPackageDetailsRowDayOfWeek = (TextView) v.findViewById(R.id.tvPackageDetailsRowDayOfWeek); tvPackageDetailsRowDayOfMonth = (TextView) v.findViewById(R.id.tvPackageDetailsRowDayOfMonth); tvPackageDetailsRowNameOfMonth = (TextView) v.findViewById(R.id.tvPackageDetailsRowNameOfMonth); tvPackageDetailsRowDetailsTitle = (TextView) v.findViewById(R.id.tvPackageDetailsRowDetialsTime); tvPackageDetailsRowDetailsDescription = (TextView) v.findViewById(R.id.tvPackageDetailsRowDetailsDescription); tvPackageDetailsRowDetialsTime = (TextView) v.findViewById(R.id.tvPackageDetailsRowDetialsTime); } } // Provide a suitable constructor (depends on the kind of dataset) public MyAdapter(ArrayList<TrackingRecordCheckedOut> myDataset) { mDataset = myDataset; } // Create new views (invoked by the layout manager) @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_list_item, parent, false); // set the view size, margins, paddings and layout parameters ViewHolder vh = new ViewHolder(v); return vh; } // Replace the contents of a view (invoked by the layout manager) @Override public void onBindViewHolder(ViewHolder holder, int position) { // - get element from your dataset at this position // - replace the contents of the view with that element TrackingRecordCheckedOut tr = mDataset.get(position); holder.tvPackageDetailsRowDayOfWeek.setText(tr.getDayOfWeek()); holder.tvPackageDetailsRowDayOfMonth.setText(tr.getDayOfWeek()); holder.tvPackageDetailsRowNameOfMonth.setText(tr.getMonthOfYear()); holder.tvPackageDetailsRowDetailsTitle.setText(tr.getTitle()); holder.tvPackageDetailsRowDetailsDescription.setText(tr.getDetails()); holder.tvPackageDetailsRowDetialsTime.setText(tr.getTimeOfDay()); } // Return the size of your dataset (invoked by the layout manager) @Override public int getItemCount() { return mDataset.size(); } } 

Fragment Layout:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/rvPackageDetails" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 

RecyclerView line layout:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/llPackageDetailsRecyclerViewRow" android:layout_width="match_parent" android:layout_height="96dip" android:orientation="horizontal" android:weightSum="100"> <LinearLayout android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="20" android:orientation="vertical" android:weightSum="10"> <TextView android:id="@+id/tvPackageDetailsRowDayOfWeek" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="3"/> <TextView android:id="@+id/tvPackageDetailsRowDayOfMonth" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="4"/> <TextView android:id="@+id/tvPackageDetailsRowNameOfMonth" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="3"/> </LinearLayout> <LinearLayout android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="80" android:orientation="vertical"> <TextView android:id="@+id/tvPackageDetailsRowDetailsTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="3"/> <TextView android:id="@+id/tvPackageDetailsRowDetailsDescription" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="4"/> <TextView android:id="@+id/tvPackageDetailsRowDetialsTime" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="3"/> </LinearLayout> </LinearLayout> 
+7
java android adapter android-fragments android-recyclerview
source share
2 answers

I looked at your code, unfortunately, I do not see a problem. One thing that can be problematic is that in the ViewHolder constructor, you call super (v). You may need to call super ((LinearLayout) v). However, this may not change the situation.

Good luck

0
source share

I had the same problem when neither onCreateViewHolder nor onBindViewHolder were called. Saving the Context link in the constructor of your adapter, and then changing the onCreateViewHolder method to use the saved Context link instead of doing parent.getContext (), you should fix it:

 private Context mContext; public MyAdapter(Context context, ArrayList<TrackingRecordCheckedOut> myDataset) { mDataset = myDataset; mContext = context; } public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view using saved reference to Context (mContext) View v = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_list_item, parent, false); // set the view size, margins, paddings and layout parameters ViewHolder vh = new ViewHolder(v); return vh; } 
0
source share

All Articles