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


Cómo obtener la posición de View en onCreateViewHolder

Estoy utilizando un RecyclerView con un diseño de una sola fila con un ImageView y un TextView.

Quiero implementar un OnClickListener para la vista y no para objetos separados de ViewHolder. ¿Cómo puedo obtener la posición de la vista en el adaptador?

  • Excepción no captada por el finalizador: error de API de Google o error de núcleo de Samsung?
  • No se puede encontrar el símbolo NOTIFICATION_SERVICE?
  • ¿Cómo puedo ocultar completamente el groupIndicator de un ExpandableListView?
  • JSON Cadena devuelta desde el servicio web SOAP que no contiene registros para la tabla
  • Enlace profundo de Facebook en Android
  • Flurry Analytics vs Google Analytics en la plataforma móvil
  • En este momento estoy eliminando los comentarios al hacer clic, pero no puedo seleccionar la vista que se ha hecho clic. Añadí un TODO en la línea apropiada.

    public class CommentAdapter extends RecyclerView.Adapter<CommentAdapter.ViewHolder> { /** List of Comment objects */ private List<Comment> mCommentList; /** Database with Comment objects */ private CommentsDataSource mDataSource; /** * Construcutor for CommentAdapter * * @param commentList List of Comment objects * @param dataSource Database with Comment objects */ public CommentAdapter(List<Comment> commentList, CommentsDataSource dataSource) { this.mCommentList = commentList; this.mDataSource = dataSource; } /** * Add Comment objects to RecyclerView * * @param position The position where the Comment object is added * @param comment Comment Object */ public void add(int position, Comment comment) { mCommentList.add(position, comment); notifyItemInserted(position); } /** * Remove Comment objects from RecyclerView * * @param comment Comment Object */ public void remove(Comment comment) { int position = mCommentList.indexOf(comment); // Avoid double tap remove if (position != -1) { mCommentList.remove(position); mDataSource.deleteComment(comment); notifyItemRemoved(position); } } @Override public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { final View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.single_line_row, parent, false); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO get position remove(mCommentList.get(getItemCount() - 1)); } }); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { final Comment comment = mCommentList.get(position); holder.comment.setText(comment.getComment()); } @Override public int getItemCount() { return mCommentList.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { /** ImageView icon */ public ImageView icon; /** TextView comment */ public TextView comment; /** * Constructor for ViewHolder * * @param itemView Layout for each row of RecyclerView */ public ViewHolder(final View itemView) { super(itemView); icon = (ImageView) itemView.findViewById(R.id.icon); comment = (TextView) itemView.findViewById(R.id.comment); } } } 

  • ¿Alguna forma de comunicarse con WebView en Android?
  • Imágenes borrosas en el navegador Android de stock
  • Escuchando la notificación en Android
  • Cómo llamar a la pestaña Onclick y OnTabChange para la misma pestaña
  • Actualizar y eliminar eventos del calendario en android a través de mi aplicación
  • Error de inicio de sesión de Spotify INVALID_CLIENT: redireccionamiento no válido URI android
  • 2 Solutions collect form web for “Cómo obtener la posición de View en onCreateViewHolder”

    No puede utilizar el parámetro de position de onBindViewHolder en una devolución de llamada. Si se agrega un nuevo elemento encima, RecyclerView no volverá a vincular su artículo para que la posición sea obsoleta . En su lugar, RecyclerView proporciona un método getAdapterPosition en el ViewHolder.

     @Override public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { final View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.single_line_row, parent, false); final ViewHolder holder = new ViewHolder(view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final int position = holder.getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { remove(mCommentList.get(position)); } } }); return holder; } 

    He añadido la position != RecyclerView.NO_POSITION comprueba porque cuando se quita el artículo, RecyclerView apagará la vista de modo que todavía pueda ser chascado por el usuario pero su posición del adaptador volverá NO_POSITION .

    Método override getItemViewType:

     @Override public int getItemViewType(int position) { //your code return position; } 

    Ahora la posición está disponible en viewType

      @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { int position=viewType; View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recursive, parent, false); return new ViewHolder(view); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.