简体   繁体   English

不调用RecyclerView Adapter方法

[英]RecyclerView Adapter methods not called

I have this weird issue with my adapter that no methods are called.. The constructor works, it stops there if I have a breakpoint but from there, nothing.. onCreateViewHolder doesn't get called and neither onBindViewHolder and not even getItemCount .. I tried everything I could find online but nothing seems to be working so I don't know what to do. 我有这个奇怪的问题,我的适配器没有调用任何方法..构造函数工作,它停在那里,如果我有一个断点,但从那里,没有.. onCreateViewHolder没有被调用,既没有onBindViewHolder ,甚至没有getItemCount ..我尝试了我在网上找到的所有东西,但似乎没有任何工作,所以我不知道该怎么做。 Any suggestions? 有什么建议么? Here's 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 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();
    }

}

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 Row Layout: RecyclerView行布局:

<?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>

I looked at your code don't really see an issue unfortunately. 我看了你的代码不幸的是没有真正看到一个问题。 One thing that might be problematic is that in you ViewHolder constructor you call super(v). 可能有问题的一点是,在ViewHolder构造函数中,您调用super(v)。 You might need to call super((LinearLayout)v). 您可能需要调用super((LinearLayout)v)。 That might not make a difference though. 但这可能没什么区别。

Good luck! 祝好运!

I had this same issue where neither onCreateViewHolder or onBindViewHolder were being called. 我有同样的问题,其中既没有调用onCreateViewHolder,也没有调用onBindViewHolder。 Saving a reference to Context in the constructor of your Adapter, and then changing your onCreateViewHolder method to use the saved reference to Context instead of doing parent.getContext() should fix it: 在Adapter的构造函数中保存对Context的引用,然后更改onCreateViewHolder方法以使用保存的Context语句而不是parent.getContext()来修复它:

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's size, margins, paddings and layout parameters
    ViewHolder vh = new ViewHolder(v);
    return vh;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 RecyclerView中没有调用适配器的onCreateViewHolder和onBindViewHolder方法? - Adapter onCreateViewHolder and onBindViewHolder methods are not getting called in RecyclerView? RecyclerView 适配器方法没有被调用 kotlin - RecyclerView Adapter methods not getting called kotlin 从RecyclerView适配器类调用Activity中的方法 - Calling methods in Activity from RecyclerView adapter class 为什么我的 RecyclerView Adapter 上的 onCreateView 没有被调用? - Why onCreateView on my RecyclerView Adapter is not called? RecyclerView 不显示项目。 适配器未被调用 - RecyclerView not showing items. Adapter is not called 没有调用回收者的自定义适配器方法 - Recycler's custom adapter methods are not called 未调用RecyclerView重写方法,并且getItemCount始终返回0 - RecyclerView Overriden methods not called and getItemCount always return 0 将ListView适配器移植到RecyclerView适配器 - Porting a ListView adapter to a RecyclerView Adapter 为什么我的RecyclerView没有显示任何内容? /如果在调用notifyDataSetChanged()之后再次设置了回收站适配器,会发生什么情况? - Why is my RecyclerView not showing anything? / What happend if Recycler Adapter is set again after notifyDataSetChanged() called? 从onActivityResult()调用时,notifyDataSetChanged()不能与我的RecyclerView.Adapter一起使用 - notifyDataSetChanged() doesn't work with my RecyclerView.Adapter when it's called from onActivityResult()
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM