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
parafill_parent
- Establezca
RecyclerView.LayoutParams
enLayoutParams.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);