android - RecyclerView show partial results -
i'm having strange problem filling recyclerview properly. have tablayout 4 tabs,in first tab want show list of contacts shows partial results ( 3 contacts or not @ all) while contacts list 250. have noticed @ first first 2 tabs instantiated , if example press third tab , first 1 shows expected results.
this adapter:
public class rvadapter extends recyclerview.adapter<rvadapter.customviewholder> { private static list<contact> contacts; // provide reference views each data item // complex data items may need more 1 view per item, , // provide access views data item in view holder public static class customviewholder extends recyclerview.viewholder { // each data item string in 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 suitable constructor (depends on kind of dataset) public rvadapter(list<contact> contacts) { this.contacts = contacts; log.d("tag","constructor "+contacts.size()); } // create new views (invoked layout manager) @override public customviewholder oncreateviewholder(viewgroup parent, int viewtype) { // create new view view v = layoutinflater.from(parent.getcontext()) .inflate(r.layout.contacts_list_item, parent, false); // set view's size, margins, paddings , layout parameters customviewholder vh = new customviewholder(v); return vh; } // replace contents of view (invoked layout manager) @override public void onbindviewholder(customviewholder holder,int position) { // - element dataset @ position // - replace contents of view 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 size of dataset (invoked layout manager) @override public int getitemcount() { return contacts.size(); } }
and how set :
@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 contact list collections.sort(contacts); // use linear layout manager mlayoutmanager = new linearlayoutmanager(getactivity().getbasecontext()); //mlayoutmanager.setorientation(linearlayoutmanager.vertical); rv_invite.setlayoutmanager(mlayoutmanager); // specify adapter madapter = new rvadapter(contacts); rv_invite.setadapter(madapter); return view; }
and layout :
<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>
Comments
Post a Comment