糟糕的表现时使用RecyclerView内NestedScrollView

我正在开发一个搜索联系功能,在屏幕上,有一个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;

}

}

回答:

您正确使用RecyclerView。不要将RecyclerView放入NestedScrollView,而是将RecyclerView中的“Header”和“Search box”作为不同的视图类型。

answer就是一个很好的例子。

以上是 糟糕的表现时使用RecyclerView内NestedScrollView 的全部内容, 来源链接: utcz.com/qa/261771.html

回到顶部