Зачем использовать статический с RecyclerView.ViewHolder

Почему рекомендуется использовать static для class, расширенного из RecyclerView.ViewHolder, если я создаю новый экземпляр этого класса в методе onCreateViewHolder, и я предполагаю, что этот экземпляр используется для каждого элемента:

@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview,parent,false);
    return new RecyclerViewAdapter.RecyclerViewHolder(view);
}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {

    String textTop = noticias.get(position).getHora()+ noticias.get(position).getTemperatura();

    holder.textViewTop.setText(textTop);
    holder.textViewBot.setText(noticias.get(position).getTexto());

}


public static class RecyclerViewHolder extends RecyclerView.ViewHolder{

    public TextView textViewTop;
    public TextView textViewBot;

    public RecyclerViewHolder(View view){
        super(view);
        textViewTop = (TextView) view.findViewById(R.id.textView4);
        textViewBot = (TextView) view.findViewById(R.id.textView5);
    }

}

person marco2704    schedule 13.11.2015    source источник


Ответы (1)


Внутренний класс содержит ссылку на внешний класс. Таким образом, это означает, что каждый экземпляр вашего RecyclerView.ViewHolder будет содержать ссылку на ваш RecyclerView.Adapter.

Делая это static, вы избегаете сохранения этой ссылки.

Документация Oracle по Java — вложенные классы

person Damian Kozlak    schedule 13.11.2015