我正在開發一個搜索聯繫功能,在屏幕上,有一個RecyclerView內NestedScrolView(fillViewport =真)。 屏幕設計:(這種設計是由顧客接受,我不能改變它)
加載當前設備的所有接觸到一個ArrayList之後,搜索結果被從該陣列過濾。
有幾種情況,使應用程序非常laggy:
1.當用戶鍵入有沒有結果的輸入,然後用戶清除搜索,我不得不再次顯示所有結果。 NestedScrollView必須爲RecyclerView(例如:300項)的所有項呈現UI。
2.當結果數量有很多變化時(例如,從1到300個項目)。 的NestedScrollView有渲染UI進行了大量的項目RecyclerView
糟糕的表現時使用RecyclerView內NestedScrollView
我知道這個設計打破循環RecyclerView的技術,但我不能改變它。
我試了一下:
recyclerView.setNestedScrollingEnabled(false);
在AndroidManifest:
android:windowSoftInputMode="adjustNothing"
適配器:
public class RecyclerContactAdapter extends RecyclerView.Adapter<RecyclerContactAdapter.ViewHolder> {
private List<MobileContact> contacts;
private Context context;
public RecyclerContactAdapter() {
contacts = new ArrayList<>();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
this.context = parent.getContext();
View view = LayoutInflater.from(context)
.inflate(R.layout.item_recycler_contact, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//set data for view
}
@Override
public int getItemCount() {
return contacts.size();
}
protected class ViewHolder extends RecyclerView.ViewHolder {
private TextView tvAlphabetHeader;
private CircleImageView civAvatar;
private TextView tvContactName;
private TextView tvStatus;
private CheckBox cbInvited;
private RelativeLayout rlAlphabetHeader;
private RelativeLayout rlContainer;
protected ViewHolder(View itemView) {
super(itemView);
tvAlphabetHeader = itemView.findViewById(R.id.item_recycler_contact_tv_alphabet_header);
civAvatar = itemView.findViewById(R.id.item_recycler_contact_civ_avatar);
tvContactName = itemView.findViewById(R.id.item_recycler_contact_tv_name);
tvStatus = itemView.findViewById(R.id.item_recycler_contact_tv_status);
cbInvited = itemView.findViewById(R.id.item_recycler_contact_cb_contact);
rlAlphabetHeader = itemView.findViewById(R.id.item_recycler_contact_rl_alphabet);
rlContainer = itemView.findViewById(R.id.item_recycler_contact_rl_contact);
}
}
public void addAll(List<MobileContact> mobileContacts) {
this.contacts.clear();
this.contacts.addAll(mobileContacts);
notifyDataSetChanged();
}
public void add(MobileContact mobileContact) {
this.contacts.add(mobileContact);
}
public List<MobileContact> getContacts() {
return this.contacts;
}
}
發佈您的recyler適配器 –
你能解釋一下你的ui設計嗎?這部分是可滾動的?即你可以滾動nestedscrollview和recyclerview內nestedscrollview或什麼? – Okas
@Okas除了工具欄,用戶可以滾動整個屏幕 –