Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Debería el observador mantener la referencia al adaptador?

Estoy leyendo el código de ejemplo de Google, el código es como este:

public class AttractionListFragment extends Fragment { ... private class AttractionAdapter extends RecyclerView.Adapter<ViewHolder> implements ItemClickListener { public List<Attraction> mAttractionList; private Context mContext; public AttractionAdapter(Context context, List<Attraction> attractions) { super(); mContext = context; mAttractionList = attractions; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Log.d("TEST", "onCreateViewHolder"); LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.list_row, parent, false); return new ViewHolder(view, this); } @Override public void onBindViewHolder(ViewHolder holder, int position) { Attraction attraction = mAttractionList.get(position); holder.mTitleTextView.setText(attraction.name); holder.mDescriptionTextView.setText(attraction.description); Glide.with(mContext) .load(attraction.imageUrl) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .placeholder(R.drawable.empty_photo) .override(mImageSize, mImageSize) .into(holder.mImageView); String distance = Utils.formatDistanceBetween(mLatestLocation, attraction.location); if (TextUtils.isEmpty(distance)) { holder.mOverlayTextView.setVisibility(View.GONE); } else { holder.mOverlayTextView.setVisibility(View.VISIBLE); holder.mOverlayTextView.setText(distance); } } @Override public long getItemId(int position) { return position; } @Override public int getItemCount() { return mAttractionList == null ? 0 : mAttractionList.size(); } @Override public void onItemClick(View view, int position) { View heroView = view.findViewById(android.R.id.icon); DetailActivity.launch( getActivity(), mAdapter.mAttractionList.get(position).name, heroView); } } private static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView mTitleTextView; TextView mDescriptionTextView; TextView mOverlayTextView; ImageView mImageView; ItemClickListener mItemClickListener; public ViewHolder(View view, ItemClickListener itemClickListener) { super(view); mTitleTextView = (TextView) view.findViewById(android.R.id.text1); mDescriptionTextView = (TextView) view.findViewById(android.R.id.text2); mOverlayTextView = (TextView) view.findViewById(R.id.overlaytext); mImageView = (ImageView) view.findViewById(android.R.id.icon); mItemClickListener = itemClickListener; view.setOnClickListener(this); } @Override public void onClick(View v) { mItemClickListener.onItemClick(v, getAdapterPosition()); } } interface ItemClickListener { void onItemClick(View view, int position); } 

}

  • ShowAsAction = "ifRoom" no muestra el elemento incluso cuando hay un montón de espacio
  • ¿Cuál es la unidad predeterminada de estilo en React Native?
  • Fragmentos que se sustituyen mientras se ejecuta AsyncTask - NullPointerException en getActivity ()
  • No se puede resolver el host "<insertar URL aquí>" Ninguna dirección asociada con el nombre de host
  • ¿Es posible que VM de Android recolecte basura de variables estáticas sin matar a toda la aplicación de Android?
  • ¿Cómo puedo crear una aplicación personalizada de reemplazo de pantalla de inicio para Android?
  • Puede ver que cada ViewHolder tiene una referencia (ItemClickListener) al adaptador, ya que el adaptador mantiene la referencia a ViewHolder ya, ¿alguien sabe si este tipo de implementación podría causar pérdida de memoria? Por favor, corrija si mi entendimiento es incorrecto.

  • Texto abajo RadioButtons
  • ¿Es posible recibir notificaciones (por ejemplo, correo electrónico) cuando la Consola para programadores de Google Play recibe un bloqueo o una ANR?
  • Eliminar salto de línea en TabLayout
  • RecyclerView Deslice con una vista inferior
  • Cómo actualizar lista personalizada usando baseadapter en android
  • Los emuladores de Genymotion dan error Open GL en Kubuntu 13.10 64-bit
  • One Solution collect form web for “¿Debería el observador mantener la referencia al adaptador?”

    No pienses que lo haría. El ViewHolder no puede existir sin el adaptador, y se recolectará basura mucho antes de que el adaptador es, ya que los ViewHolders son constantemente reciclados por el adaptador como el RecyclerView se desplaza. El patrón de interfaz que se utiliza es sólo una forma común de notificar al adaptador que se ha hecho clic en un determinado ViewHolder. Supongo que podría perder la memoria si hace lo contrario al mantener una referencia a un ViewHolder específico en una variable miembro dentro del adaptador, ya que podría impedir que el ViewHolder de GC'd. Sin embargo, el código anterior parece bastante estándar.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.