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