Java – recyclerview adapter method not called
•
Java
I have this strange problem that my adapter does not call any methods The constructor works, it stops there if I have a breakpoint, but from there, there is no Oncreateviewholder was not called, neither onbindviewholder nor getitemcount I tried everything I found online, but I didn't seem to have any job, so I didn't know what to do Any suggestions? This is my code:
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's 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(); } }
Clip 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 row 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>
Solution
I looked at your code. Unfortunately, I didn't really see a problem One possible problem is that in the viewholder constructor, you call super (V) You may need to call super ((LinearLayout) V) But it may make no difference
Good luck!
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码