studio recyclerview make how dependency create android android-recyclerview

android - make - Artículo en RecyclerView no rellenando su ancho match_parent



recyclerview dependency (1)

Tengo un problema con mi RecyclerView y sus elementos secundarios. No se extienden por todo el android:layout_width="match_parent" ni fill_parent . He intentado ambos. El caso es que este funciona a la perfección y sin cambios, de alguna manera se arruinó.

Estoy mostrando esto en un FragmentDialog y los elementos secundarios solo se expanden como wrap_content cuando wrap_content la vista hacia arriba y hacia abajo, están completamente expandidos, pero tan pronto como hago clic en ellos ( notifyDataSetChanged() ) se contraen de nuevo.

Aquí hay una imagen de un artículo debidamente llenado y debajo está cómo están cuando se cargan o cuando notificoData. También el StickHeaderAdapter que uso, no muestra encabezados hasta que hago clic en uno de los elementos (este trabajo anteriormente y tampoco cambié nada en esa parte).

Aquí está el código para la fila secundaria:

<?xml version="1.0" encoding="utf-8"?> <carbon.widget.LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" app:carbon_rippleColor="@color/green" app:carbon_rippleStyle="background"> <carbon.widget.TextView android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/block_name" android:padding="@dimen/block_row_padding" android:layout_weight="1" android:textSize="@dimen/block_row_text_size" android:textColor="@color/black" app:carbon_rippleColor="@color/green" app:carbon_rippleStyle="background"/> <RelativeLayout android:id="@+id/download_layout" android:layout_width="64dp" android:layout_height="match_parent" android:layout_marginRight="24dp" android:layout_marginEnd="24dp" android:visibility="gone"> <carbon.widget.ProgressBar android:id="@+id/downloading_bar" app:carbon_progressStyle="circular_indeterminate" app:carbon_barWidth="5dp" app:carbon_tint="@color/green" android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_margin="8dp" android:visibility="invisible"/> <carbon.widget.TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/block_progress_download" android:textSize="12sp" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:visibility="invisible" /> </RelativeLayout>

Y aquí está la parte del código del adaptador donde creo ViewHolder :

@Override public BlockAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.block_row, parent, false); return new ViewHolder(view); }

Este es el código de enlace si ayuda:

@Override public void onBindViewHolder(BlockAdapter.ViewHolder holder, int position) { if (blockData.isDownloading()) { holder.download_layout.setVisibility(View.VISIBLE); holder.download_bar.setVisibility(View.VISIBLE); if (blockData.getProgress() != null) { holder.download_progress.setVisibility(View.VISIBLE); holder.download_progress.setText(String.format("%d%%", blockData.getProgress())); } } else { holder.download_layout.setVisibility(View.GONE); holder.download_bar.setVisibility(View.GONE); holder.download_progress.setVisibility(View.GONE); } if (selected) { holder.itemView.setBackgroundColor(mContext.getResources().getColor(R.color.green)); holder.block_name.setTextColor(mContext.getResources().getColor(R.color.white)); } else { holder.itemView.setBackgroundColor(mContext.getResources().getColor(R.color.white)); holder.block_name.setTextColor(mContext.getResources().getColor(R.color.black)); } }

No sé por qué este trabajo en la mañana y cambió más tarde ...

Cosas que intenté:

  • Cambiar match_parent para fill_parent
  • Establezca RecyclerView.LayoutParams en LayoutParams.MATCH_PARENT
  • Cambiar ancho programáticamente
  • Cambiar createViewHolder desde ..., parent, false); a ..., null); y agregue Params separadamente
  • Registrado el ancho (a veces es como 390, cuando me desplazo pasa a 990 y cuando hago clic de nuevo a 390)
  • Configure StickHeaders antes, pero están todos configurados cuando se crean y el encabezado está allí, es simplemente invisible.

CUALQUIER AYUDA ES APRECIADA!


El problema está en la nueva biblioteca de soporte 23.2.0 , así que 23.1.1 eso a 23.1.1 y funciona bien. Si encuentro una solución, o qué cambiar, te lo haré saber, de lo contrario, dejaré este hilo abierto si alguien encuentra una mejor respuesta.

ACTUALIZAR

Ok, entonces decidí que era hora de arreglar esto, ya que necesitamos movernos a nuevas bibliotecas de soporte y finalmente encontré una respuesta.

El problema era / es que el nuevo LayoutManager está usando autoMeasure() y de alguna manera cambió todo mi match_parent a wrap_content , así que esto es lo que debes hacer, si encuentras un problema similar.

Primero crea LinearLayoutManager llm = new LinearLayoutManager(getActivity());

luego llm.setAutoMeasureEnabled(false);

y finalmente configura el LinearLayoutManager en su RecyclerView , pero haga esto DESPUÉS de recyclerView.setAdapter(yourAdapter);

Aquí hay un ejemplo rápido:

recyclerView.setAdapter(adapter); recyclerView.setHasFixedSize(true); LinearLayoutManager llm = new LinearLayoutManager(getActivity()); llm.setAutoMeasureEnabled(false); recyclerView.setLayoutManager(llm);