es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo acceder a un fragmento de ArrayList al usar un adaptador?

Estoy trabajando en mi código para generar la lista de colores y almacenarla en el arreglo ColorList. Ahora quiero acceder al color desde el arreglo ColorList, pero no sé cómo puedo hacerlo cuando he creado la lista en el fragmento mientras estoy usando el adaptador.

Aquí está el código de mi InboxFragment:

/* El código del fragement lo dejé sin traducir debido a que contiene código que no debe ser traducido y no tiene relevancia en la traducción del texto. */

Aquí está el código del InboxAdapter:

/* El código del adaptador lo dejé sin traducir debido a que contiene código que no debe ser traducido y no tiene relevancia en la traducción del texto. */

¿Puede mostrarme un ejemplo de cómo puedo tener acceso al arreglo colorList del fragmento cuando estoy usando el adaptador para obtener el arreglo colorList?

Gracias.

Edición: Aquí está mi adaptador:

/* El código del adaptador lo dejé sin traducir debido a que contiene código que no debe ser traducido y no tiene relevancia en la traducción del texto. */

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para acceder a la matriz de colores de fragment colorList desde el adaptador, debes pasar la matriz de colores como parámetro en el constructor de InboxAdapter. Aquí tienes un código actualizado de InboxAdapter con colorList como parámetro:

    public class InboxAdapter extends RecyclerView.Adapter<inboxadapter.viewholder> {
       private static final String LOG_TAG = InboxAdapter.class.getSimpleName();
       private boolean reverseAllAnimations = false;
       private SparseBooleanArray selectedItems;
       public List<inbox> mInboxes;
       public ArrayList<string> colorList;
    
       public InboxAdapter(Context mContext, List<inbox> inboxes, ArrayList<string> colorList) {
          this.mContext = mContext;
          mInboxes = inboxes;
          this.colorList = colorList;
       }
    
       @Override
       public InboxAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          Context context = parent.getContext();
          LayoutInflater inflater = LayoutInflater.from(context);
          View contactView = inflater.inflate(R.layout.recyclerview_mail_item, parent, false);
          ViewHolder viewHolder = new ViewHolder(contactView);
    
          return viewHolder;
       }
    
       @Override
       public void onBindViewHolder(ViewHolder holder, int position) {
          inbox inbox = mInboxes.get(position);
          // Usa colorList.get(position) para obtener el color correspondiente
          String color = colorList.get(position);
    
          holder.subject.setOnClickListener(new View.OnClickListener() {
             @RequiresApi(api = Build.VERSION_CODES.N)
             @Override
             public void onClick(View v) {
                int idx = holder.getAdapterPosition();
                String id = mInboxes.get(idx).getId();
                String color = colorList.get(idx).toString();
    
                openEmailActivity(mailbox, id, color, short_name, subject1, from, from_email, datetime, isImportant);
             }
          });
    
          // Establece el color de fondo
          holder.tvIcon.setBackgroundColor(Color.parseColor(color));
       }
    
       public static class ViewHolder extends RecyclerView.ViewHolder {
          public TextView tvIcon;
          public TextView from;
          public TextView subject;
          public TextView message;
          public TextView time;
          public ImageView iconImp;
          public RelativeLayout layout1;
          public ImageView attachment;
          public Integer color1;
    
          public ViewHolder(View itemView) {
             super(itemView);
    
             tvIcon = itemView.findViewById(R.id.tvIcon);
             from = itemView.findViewById(R.id.from);
             subject = itemView.findViewById(R.id.subject);
             message = itemView.findViewById(R.id.message);
             time = itemView.findViewById(R.id.time);
             iconImp = itemView.findViewById(R.id.icon_star);
             layout1 = itemView.findViewById(R.id.layout1);
             attachment = itemView.findViewById(R.id.attachment);
          }
       }
    
       // Otros métodos
       ...
    }
    

    En el método onBindViewHolder del adaptador InboxAdapter, puedes usar colorList.get(position) para obtener el color correspondiente de la matriz de colorList. Luego, puedes pasar este color al método openEmailActivity o establecerlo como el color de fondo del TextView tvIcon.

    Para instanciar el adaptador en el fragmento, debes pasar la matriz de colorList como parámetro:

    java
    private void setupRecyclerView(@NonNull RecyclerView recyclerView) {
    mInboxAdapter = new InboxAdapter(getActivity(), mInbox, colorList); // Pasa la matriz de colorList como parámetro
    ...
    }
    </inboxadapter.viewholder>

Comments are closed.