2015-03-29 3 views
3

У меня есть RecyclerView, который я использую. Раньше я использовал RecyclerView, но у меня не было этой проблемы.Android RecyclerView, утилизация не работает должным образом

Когда я просматриваю вверх и вниз, некоторые предметы исчезают, а некоторые элементы, которые исчезают, снова появляются в нижней части.

Код:

ViewHolder:

public class ViewHolder extends RecyclerView.ViewHolder { 
    public TextView txt; 

    public ViewHolder(View view) { 
     super(view); 
     txt = (TextView) view.findViewById(R.id.txt); 
    } 
} 

Adapter:

public class MyAdapter extends RecyclerView.Adapter<ViewHolder> { 
    private final Activity activity; 
    private final ArrayList<HashMap<String, String>> mItems; 

    public MyAdapter (Activity activity, ArrayList<HashMap<String, String>> mItems) { 
     this.activity = activity; 
     this.mItems= mItems; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.items, viewGroup, false)); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int position) { 
     HashMap<String, String> item = mItems.get(position); 

     String info = item.get("info "); 
     if (info!= null) { 
      viewHolder.txt.setText(info); 
     } else { 
      viewHolder.txt.setVisibility(View.GONE); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return (null != mItems? mItems.size() : 0); 
    } 
} 

ответ

8

onBindViewHolder повторно просмотров так скажем, первый раз onBindViewHolder() называется, info является null. Это приведет к тому, что строка будет иметь видимость View.GONE.

Когда onBindViewHolder вызывается снова, чтобы связать новую строку, вид для этой строки по-прежнему View.GONE - ничто не сбрасывается между связанными строками.

Поэтому ваш, если оператор должен полностью сбросить состояние:

if (info!= null) { 
    viewHolder.txt.setText(info); 
    viewHolder.txt.setVisibility(View.VISIBLE); 
} else { 
    viewHolder.txt.setVisibility(View.GONE); 
} 

Это гарантирует, что видимость каждой строки установлен правильно.

Смежные вопросы