Я создал один макет, в котором я использую переработчик с представлением и несколько других представлений внутри вложенного прокрутки. Что я понимаю, так это то, что если я помещу представление ресайклера во вложенный вид прокрутки, для отображения элементов списка потребуется время. Когда я проверяю внутренний адаптер, он показывает, что он вызывает onBindholder
несколько раз. Если я удаляю вложенный вид прокрутки, он работает нормально. Код выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<include
--- ToolBar View ---/>
<include
--- Search View ---/>
<android.support.v4.widget.NestedScrollView
android:id="@+id/nested_scroll_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
--- Some views ---
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginLeft="@dimen/margin_5"
android:layout_marginRight="@dimen/margin_5"
android:splitMotionEvents="false"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</LinearLayout>
и мой адаптер выглядит так:
package sample.example.adapters;
public class CustomAdapter extends RecyclerView.Adapter {
private LayoutInflater mInflater;
private List<Data> list;
private ItemClickListener itemClickListener;
public void setItemClickListener(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
public PopularConditionAdapter(Context context , List<Data> list) {
this.mInflater = LayoutInflater.from(context);
this.list = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.row_layout, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolder viewHolder = (ViewHolder) holder;
Data condition = list.get(position);
if(condition != null && condition.getConditionTitle() != null) {
viewHolder.conditionName.setText(condition.getConditionTitle());
viewHolder.conditionNameInitial.setText(Tools.getUserInitial(condition.getConditionTitle()));
}
}
@Override
public int getItemCount() {
if(popularConditionList !=null)
{
return popularConditionList.size();
}else{
return 0;
}
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public View popularParentView;
public TextView conditionNameInitial;
public TextView conditionName;
public ViewHolder(View itemView) {
super(itemView);
conditionNameInitial = (TextView) itemView.findViewById(R.id.some_id);
conditionName = (TextView) itemView.findViewById(R.id.test_id);
popularParentView = itemView.findViewById(R.id.round_id);
popularParentView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (itemClickListener != null) {
itemClickListener.onItemClick(v, list.get(getPosition()));
}
}
}
public interface ItemClickListener {
void onItemClick(View view, Data condition);
}
public void reloadList(List<Data> dataList){
list.clear();
if(dataList!=null){
Iterator<Data> iterator = dataList.iterator();
while (iterator.hasNext()){
List.add(iterator.next());
}
}
}
}
Я тоже иногда звоню notifyDataSetChanged
. Нужна помощь, чтобы определить, какие неправильные вещи я делаю.
https://developer.android.com/topic/performance/vitals/render.html
для получения дополнительных разъяснений по этому вопросу. Я считаю, что если вопрос недействителен или не требует пояснений, то люди должны попросить больше разъяснений по нему, прежде чем проголосовать против вопроса. Люди, которые задают здесь вопросы, ищут помощи. Голосование против вопроса отпугнет их (в списке для новых пользователей). - person nilkash   schedule 22.06.2017