Android RecyclerView显示部分结果

Android RecyclerView显示部分结果,android,android-recyclerview,Android,Android Recyclerview,我在正确填充回收视图时遇到了一个奇怪的问题。 我有一个包含4个选项卡的表格,在第一个选项卡中,我想显示联系人列表,但它只显示部分结果(3个联系人或根本不显示) 而我的联系人名单大约是250人。 我还注意到,一开始只有前两个选项卡被实例化,例如,如果我按下第三个选项卡,然后按下第一个选项卡,它会显示预期的结果 这是我的适配器: public class rvAdapter extends RecyclerView.Adapter<rvAdapter.CustomViewHolder>

我在正确填充回收视图时遇到了一个奇怪的问题。 我有一个包含4个选项卡的表格,在第一个选项卡中,我想显示联系人列表,但它只显示部分结果(3个联系人或根本不显示) 而我的联系人名单大约是250人。 我还注意到,一开始只有前两个选项卡被实例化,例如,如果我按下第三个选项卡,然后按下第一个选项卡,它会显示预期的结果

这是我的适配器:

public class rvAdapter extends RecyclerView.Adapter<rvAdapter.CustomViewHolder> {
    private static List<Contact> contacts;


    // 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 static class CustomViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTextViewName;
        public CheckBox mCheckBox;
        public TextView mTextViewNumber;

        public CustomViewHolder(View view) {
            super(view);
            this.mTextViewName = (TextView) view.findViewById(R.id.tv_name);
            this.mCheckBox = (CheckBox) view.findViewById(R.id.cb_check_box);
            this.mTextViewNumber = (TextView) view.findViewById(R.id.tv_number);
        }
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public rvAdapter(List<Contact> contacts) {

        this.contacts = contacts;

        Log.d("TAG","constructor "+contacts.size());
    }

    // Create new views (invoked by the layout manager)
    @Override
    public CustomViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.contacts_list_item, parent, false);
        // set the view's size, margins, paddings and layout parameters

        CustomViewHolder vh = new CustomViewHolder(v);

        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(CustomViewHolder holder,int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        String name = contacts.get(position).getName();
        String number = contacts.get(position).getPhone_number();
        //Boolean status = contacts.get(position).isSelected();
        holder.mTextViewName.setText(name);
        holder.mTextViewNumber.setText(number);
    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return contacts.size();
    }


}
公共类rvAdapter扩展了RecyclerView.Adapter{ 私人静态列表联系人; //提供对每个数据项的视图的引用 //复杂数据项可能需要每个项有多个视图,并且 //您可以访问视图持有者中数据项的所有视图 公共静态类CustomViewHolder扩展了RecyclerView.ViewHolder{ //在本例中,每个数据项只是一个字符串 公共文本视图mTextViewName; 公共复选框mCheckBox; 公共文本视图mTextViewNumber; 公共CustomViewHolder(视图){ 超级(视图); this.mTextViewName=(TextView)view.findviewbyd(R.id.tv_name); this.mCheckBox=(复选框)view.findviewbyd(R.id.cb\u复选框); this.mTextViewNumber=(TextView)view.findviewbyd(R.id.tv_编号); } } //提供合适的构造函数(取决于数据集的类型) 公用适配器(列出联系人){ 这个。联系人=联系人; Log.d(“TAG”、“constructor”+contacts.size()); } //创建新视图(由布局管理器调用) @凌驾 公共CustomViewHolder onCreateViewHolder(视图组父级, int视图类型){ //创建新视图 视图v=LayoutInflater.from(parent.getContext()) .充气(R.layout.contacts\u list\u项目,父项,错误); //设置视图的大小、边距、填充和布局参数 CustomViewHolder vh=新CustomViewHolder(v); 返回vh; } //替换视图的内容(由布局管理器调用) @凌驾 公共无效onBindViewHolder(CustomViewHolder,int位置){ //-在此位置从数据集中获取元素 //-用该元素替换视图的内容 字符串名称=contacts.get(position.getName(); 字符串编号=contacts.get(position).getPhone_number(); //布尔状态=contacts.get(position.isSelected(); holder.mTextViewName.setText(名称); holder.mTextViewNumber.setText(数字); } //返回数据集的大小(由布局管理器调用) @凌驾 public int getItemCount(){ 返回contacts.size(); } } 这就是它的设置方式:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view= inflater.inflate(R.layout.fragment_invite, container, false);

    numbers = new ArrayList<>();
    contacts = new ArrayList<>();
    //find done button
    btn_done = (Button) view.findViewById(R.id.btn_done);
    //find listview
    rv_invite = (RecyclerView) view.findViewById(R.id.rv_invite);
    //get contacts list

    setContacts(numbers);
    //sorting the contact list
    Collections.sort(contacts);

    // use a linear layout manager
    mLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
    //mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    rv_invite.setLayoutManager(mLayoutManager);

    // specify an adapter 
    mAdapter = new rvAdapter(contacts);

    rv_invite.setAdapter(mAdapter);
    return view;
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u invite,container,false);
数字=新的ArrayList();
联系人=新的ArrayList();
//查找完成按钮
btn_done=(按钮)view.findviewbyd(R.id.btn_done);
//查找列表视图
rv_invite=(RecyclerView)view.findviewbyd(R.id.rv_invite);
//获取联系人列表
设置联系人(号码);
//对联系人列表进行排序
收集。分类(联系人);
//使用线性布局管理器
mLayoutManager=newlinearlayoutmanager(getActivity().getBaseContext());
//mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rv_邀请setLayoutManager(mLayoutManager);
//指定一个适配器
mAdapter=新的rvAdapter(触点);
rv_invite.setAdapter(mAdapter);
返回视图;
}
这是布局图:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_invite"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn_done"
        android:layout_gravity="center"
        android:text="@string/Done" />
</LinearLayout>


构造函数中log.d(大小)的结果是什么。您的第二个问题陈述不清楚,您的视图是否每次都加载,而您不希望加载?log.d(大小)显示250个结果,但是我在视图上只看到了3个。你可以添加一个布局文件,其中包含R.layout.fragment_邀请的回收器视图到问题中吗?我已经添加了布局文件@ShadowDroidI我确信你必须能够滚动回收器视图…但是要测试,请删除权重属性,并使回收器视图的高度现在匹配父视图,并检查是否你可以看到3个以上的结果…如果你想在你的屏幕底部的按钮,然后去相对布局。