studio recyclerview make how ejemplo dependency create android android-recyclerview

android - make - recyclerview dependency



el ancho de match_parent no funciona en RecyclerView (9)

Mi RecyclerView y el elemento tienen ancho de match_parent pero el resultado es:

<view class="android.support.v7.widget.RecyclerView" android:layout_width="match_parent"

y artículos:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:fab="http://schemas.android.com/apk/res-auto" android:id="@+id/ll_itm" android:orientation="horizontal" android:layout_width="match_parent"

completo:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:fab="http://schemas.android.com/apk/res-auto" android:id="@+id/ll_itm" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="100" android:gravity="right" > <Button android:layout_width="0dp" android:layout_weight="15" android:layout_height="fill_parent" android:text="ملاحظات" android:id="@+id/button" /> <LinearLayout android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="20" android:gravity="center" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <com.getbase.floatingactionbutton.FloatingActionButton android:layout_width="fill_parent" android:layout_height="fill_parent" fab:fab_plusIconColor="#ff56ff83" fab:fab_colorNormal="@color/d_red" fab:fab_colorPressed="#ff5c86ff" fab:fab_size="mini" fab:fab_icon="@drawable/ic_remove_white" android:id="@+id/fab_rmv" /> <esfandune.ir.elmikarbordiardakan.other.CustomTxtView android:layout_weight="25" android:layout_width="0dp" android:layout_height="fill_parent" android:textAppearance="?android:attr/textAppearanceLarge" android:text="0" android:gravity="right|center_vertical" android:id="@+id/txt_takhir_itm" /> <com.getbase.floatingactionbutton.FloatingActionButton android:layout_width="fill_parent" android:layout_height="fill_parent" fab:fab_plusIconColor="@color/colorprimarylight" fab:fab_colorNormal="@color/colorprimarydark" fab:fab_colorPressed="@color/colorprimary" fab:fab_size="mini" fab:fab_icon="@drawable/ic_add_white" android:id="@+id/fab_add" /> </LinearLayout> </LinearLayout> <Spinner android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="10" android:id="@+id/sp_nomre_itm" android:entries="@array/degrees"/> <LinearLayout android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="10" android:gravity="center" > <!--LinearLayout baraye ine ke nameshod fab ro weight behosh dad--> <com.getbase.floatingactionbutton.FloatingActionButton android:layout_width="fill_parent" android:layout_height="fill_parent" fab:fab_plusIconColor="#ff56ff83" fab:fab_colorNormal="@color/d_green" fab:fab_colorPressed="@color/d_orange" fab:fab_size="normal" fab:fab_icon="@drawable/ic_done_white" android:id="@+id/fab_hazr" /> </LinearLayout> <esfandune.ir.elmikarbordiardakan.other.CustomTxtView android:layout_weight="5" android:layout_width="0dp" android:layout_height="fill_parent" android:textAppearance="?android:attr/textAppearanceLarge" android:text="100" android:gravity="right|center_vertical" android:id="@+id/txt_ghybtNumber_itm" /> <esfandune.ir.elmikarbordiardakan.other.CustomTxtView android:layout_weight="30" android:layout_width="0dp" android:layout_height="fill_parent" android:textAppearance="?android:attr/textAppearanceLarge" android:text="عباسعلی ملاحسینی اردکانی" android:gravity="right|center_vertical" android:id="@+id/txt_title_itm" android:layout_marginRight="10dp" /> <view android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="10" class="de.hdodenhof.circleimageview.CircleImageView" android:id="@+id/view" android:src="@drawable/mmrdf" /> </LinearLayout>


Dentro del método onCreateViewHolder (...) del adaptador donde está inflando la vista ... debe definir ViewGroup como padre. Esto se obtendrá del primer parámetro del método onCreateViewHolder (...).

ver la línea de abajo en el segundo parámetro estoy pasando el ViewGroup. Esto hará coincidir automáticamente la vista con su padre:

rowView=inflater.inflate(R.layout.home_custom_list, parent,false);

/// el código completo está debajo

public View onCreateViewHolder(ViewGroup parent, int position) { // TODO Auto-generated method stub View rowView; LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); rowView=inflater.inflate(R.layout.home_custom_list, parent,false);


En mi caso, el problema estaba en la declaración XML de RecyclerView , el layout_width era 0dp, lo que significa que match_constraints, cuando lo cambié a match_parent , los elementos comenzaron a llenar todo el ancho de RecyclerView :

<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="0dp" <-- changed this to "match_parrent" android:layout_height="0dp" android:layout_marginBottom="45dp" android:background="@android:color/transparent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHeight_default="wrap" app:layout_constraintHeight_max="360dp" app:layout_constraintHeight_min="60dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/header"/>


En su adaptador donde está inflando el elemento en onCreateViewHolder , ¿es onCreateViewHolder el segundo parámetro de la llamada de inflado?

Si es así, cámbielo a parent que es el primer parámetro en la firma de la función onCreateViewHolder .

View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, parent, false);

Si necesita que el segundo parámetro sea null , cuando obtenga la referencia de vista sobre el inflado, haga lo siguiente

View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, null, false); RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); rootView.setLayoutParams(lp); return new RecyclerViewHolder(rootView);


Estaba usando un FrameLayout con MATCH_PARENT para el ancho y estaba viendo el mismo comportamiento con un RecyclerView + LinearLayoutManager . Ninguno de los cambios anteriores funcionó para mí hasta que hice lo siguiente en la onCreateViewHolder llamada onCreateViewHolder :

@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.note_layout, parent, false); v.setLayoutParams(new RecyclerView.LayoutParams( ((RecyclerView) parent).getLayoutManager().getWidth(), context.getResources() .getDimensionPixelSize(R.dimen.note_item_height))); return new ViewHolder(v); }

Claramente parece un error en (supongo) la implementación de RecyclerView.


Esto funcionó para mí.

reemplazar esto

View view = View.inflate(parent.getContext(), R.layout.row_timeline, null); return new TimeLineViewHolder(view, viewType);

por esto

View rootView = LayoutInflater.from(context).inflate(R.layout.row_timeline, null, false); RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); rootView.setLayoutParams(lp); return new TimeLineViewHolder(rootView, viewType);


Había arreglado así. En mi caso, problema con el archivo de diseño de actividad porque estoy usando ConstraintLayout como diseño de actividad raíz. También podría ser para usted.

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/toolBar" layout="@layout/toolbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@+id/fragment_container" android:layout_width="0dp" android:layout_height="wrap_content" android:background="@color/accent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/toolBar" /> </android.support.constraint.ConstraintLayout>


No puedo ver su código completo, pero puedo adivinar que algunas de las vistas dentro de LinearLayout son '' wrap_content ''. android:layout_weight="1" hacer que uno o algunos de ellos se expandan al ancho completo usando '' android:layout_weight="1" ''

actualización: tienes muchos layout_weight redundantes. wrap_content a todos en " wrap_content " y solo uno de ellos agregue layout_weight=1 - para la última CustomTextView. De esta manera, ocupará todo el espacio en blanco.


Resolví esto con:

myInflatedRowLayout.getLayoutParams().width = vg.getWidth();

Está reemplazando MATCH_PARENT con el ancho real de RecyclerView .


intente esto cuando configure los parámetros de diseño para su artículo en el adaptador.

View viewHolder= LayoutInflater.from(parent.getContext()) .inflate(R.layout.item, parent, false); viewHolder.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)); ViewOffersHolder viewOffersHolder = new ViewOffersHolder(viewHolder); return viewOffersHolder;