La vista horizontal del reciclador no muestra nada
Tengo una vista de reciclador horizontal en un diseño relativo, todo parece bien, pero en el diseño no muestra ningún elemento de la vista de reciclar. Hay algunas mismas preguntas en el sitio web, pero no puedo encontrar el problema. Aquí está el código :
Adaptador RecyclerView:
- Cómo usar el mismo Adaptador RecyclerView para diferentes diseños
- Las vistas devuelven NullPointerException en onBindViewHolder en RecyclerView Adapter
- Animación de RecyclerView en el clic de artículo
- Configurar RecyclerView para trabajar como chat
- Los fragmentos ViewPager hacen referencia al mismo RecyclerView y / o Adapter
public class ExamDetailRecyclerViewAdapter extends RecyclerView.Adapter<ExamDetailRecyclerViewAdapter.DetailViewHolder> { private String[] examNameList; private Integer[] examImageIds; private String[] examPriceList; private static Activity activity; public ExamDetailRecyclerViewAdapter(Activity activity, String[] examNameList, Integer[] examImageIds, String[] examPriceList) { this.examNameList = examNameList; this.activity = activity; this.examImageIds = examImageIds; this.examPriceList = examPriceList; } @Override public int getItemCount() { return examNameList.length; } @Override public long getItemId(int position) { return position; } public DetailViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View itemView = LayoutInflater.from(viewGroup.getContext()).inflate( R.layout.exam_detail_hlistview_item, viewGroup, false); return new DetailViewHolder(itemView); } public static class DetailViewHolder extends RecyclerView.ViewHolder implements OnClickListener { TextView examNameTextView; ImageView examImageView; TextView examPriceTextView; RatingBar examRatingBar; public DetailViewHolder(View v) { super(v); examNameTextView = (TextView) v .findViewById(R.id.exDetail_hListView_exam_name); examImageView = (ImageView) v .findViewById(R.id.exDetail_hListView_image); examPriceTextView = (TextView) v .findViewById(R.id.exDetail_hListView_exam_price); examRatingBar = (RatingBar) v .findViewById(R.id.exDetail_hListView_exam_rating_bar); v.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub Intent i = new Intent(v.getContext(), ExamDetailActivity.class); activity.startActivity(i); } } @Override public void onBindViewHolder(DetailViewHolder detailViewHolder, int i) { // TODO Auto-generated method stub detailViewHolder.examNameTextView.setText(examNameList[i]); String num = displayNumbertoFarsi(examPriceList[i]); detailViewHolder.examPriceTextView.setText(num); detailViewHolder.examImageView.setImageResource(examImageIds[i]); detailViewHolder.examRatingBar .setOnRatingBarChangeListener(new OnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { Toast.makeText(activity, "Rating Value: " + String.valueOf(rating), Toast.LENGTH_SHORT).show(); } }); } }
Disposición de la vista del reciclador
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/ir.elenoon.bazmoon" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <include android:id="@+id/toolbar_exam" layout="@layout/toolbar" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" > <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/about_exam_bottom_layout" android:background="@color/chromatic_grey" android:scaleType="fitXY" android:scrollbars="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg" > <RelativeLayout android:id="@+id/fourth_partition" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/third_partition" android:layout_marginBottom="15dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="15dp" android:background="@drawable/button_border" android:padding="12dp" > <app.textView.custemFont.TextViewPlus android:id="@+id/about_exam_same_exams_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_margin="5dp" android:text="@string/about_exam_same_exams_title" android:textColor="#000000" android:textStyle="bold" app:customFont1="DroidNaskhRegularSystemUI.ttf" /> <android.support.v7.widget.RecyclerView android:id="@+id/exam_detail_hListView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/about_exam_same_exams_title" android:background="#000000" android:focusable="false" android:paddingBottom="20dp" android:paddingTop="20dp" android:scrollbars="horizontal" /> </RelativeLayout> </RelativeLayout> </ScrollView> </RelativeLayout> </LinearLayout>
Recyler ver elemento xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/ir.elenoon.bazmoon" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="horizontal" android:padding="5dp" > <ImageView android:id="@+id/exDetail_hListView_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="5dp" android:layout_marginTop="5dp" android:contentDescription="@string/image_button_contentDescription" android:scaleType="fitXY" android:src="@drawable/icon_luncher" /> <app.textView.custemFont.TextViewPlus android:id="@+id/exDetail_hListView_exam_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="5dp" android:layout_marginTop="5dp" android:text="exam_name" android:textColor="@color/black" app:customFont1="DroidNaskhRegularSystemUI.ttf" /> <RelativeLayout android:id="@+id/bottom_grid_view_layout" android:layout_width="match_parent" android:layout_height="wrap_content" > <app.textView.custemFont.TextViewPlus android:id="@+id/exDetail_hListView_exam_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_gravity="right" android:layout_marginBottom="5dp" android:layout_marginTop="5dp" android:layout_toRightOf="@+id/exDetail_hListView_exam_rating_bar" android:text="exam_price" android:textColor="@color/black" app:customFont1="Byekan.ttf" /> <RatingBar android:id="@+id/exDetail_hListView_exam_rating_bar" style="@style/foodRatingBarSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:isIndicator="true" android:numStars="5" android:rating="3" android:stepSize="0.1" /> </RelativeLayout> </LinearLayout>
Actividad principal:
public class ExamDetailActivity extends AppCompatActivity { String[] examNameList = { "Java", "C", "C++", "C#", "Jsp", "Microsoft .Net", "Android", "PHP", "Jquery", "JavaScript" }; String[] examPriceList = { "1000 ت", "2000 ت", "3000 ت", "4000 ت", "5000 ت", "6000 ت", "7000 ت", "8000 ت", "9000 ت", "10 000 ت" }; // Keep all Images in array Integer[] examImageIds = { R.drawable.s1, R.drawable.s2, R.drawable.s3, R.drawable.s4, R.drawable.s5, R.drawable.s6, R.drawable.s7, R.drawable.s8, R.drawable.s9, R.drawable.s10 }; ExamDetailRecyclerViewAdapter mDetailHListViewAdapter; private RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.exam_detail); recyclerView = (RecyclerView) findViewById(R.id.exam_detail_hListView); recyclerView.setHasFixedSize(true); LinearLayoutManager llm = new LinearLayoutManager(this); llm.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerView.setLayoutManager(llm); ExamDetailRecyclerViewAdapter examDetailHListViewAdapter = new ExamDetailRecyclerViewAdapter( this, examNameList, examImageIds, examPriceList); recyclerView.setAdapter(examDetailHListViewAdapter); }}
- Vista previa de recyclerview horizontal en android studio
- Cómo refundir elementos en un RecyclerView con el StaggeredGridLayoutManager
- Multiline EditText en los problemas de desplazamiento de RecyclerView
- SetAlpha () en onBindView en RecyclerView no funciona en la primera pantalla
- Desplazar SwipeRefreshLayout con RecyclerView Actualizar en cualquier lugar de android 2.2
- Android Recyclerview GridLayoutManager espaciamiento de columnas
- RecyclerView con GridLayoutManager
- "LayoutManager ya está conectado a un RecyclerView" error
Como señaló Rohan WRAP_CONTENT
como una altura no funciona con el RecyclerView
para una solución simple, intente establecer un
android:minHeight="...dp"
en el RecyclerView
Si no le importa que sugiera, su implementación para el adaptador de RecyclerView se ve un poco compleja. Tal vez organizar listas de nombres de exámenes, listas de precios e id de imagen en una clase común. Por ejemplo
public class Exam { String examName; String price; int imageId; // getter and setters for exame name, price, and image id }
Ahora en lugar de tener numerosos parámetros en su constructor tendría un constructor como este.
List<Exam> examList; public ExamDetailRecyclerViewAdapter(Activity activity, List<Exam> examList) { this.examList = examList; this.activity = activity; }
Su onBindViewHolder
se vería así:
@Override public void onBindViewHolder(DetailViewHolder detailViewHolder, int position) { // TODO Auto-generated method stub Exam exam = examList.get(position); detailViewHolder.examNameTextView.setText(exam.getExamName()); String num = displayNumbertoFarsi(exam.getPrice(); detailViewHolder.examPriceTextView.setText(num); detailViewHolder.examImageView.setImageResource(exam.getImageId()); detailViewHolder.examRatingBar .setOnRatingBarChangeListener(new OnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { Toast.makeText(activity, "Rating Value: " + String.valueOf(rating), Toast.LENGTH_SHORT).show(); } }); } }
Es posible que desee consultar el siguiente hilo
¿Cómo puedo hacer que WRAP_CONTENT funcione en un RecyclerView
Wrap_content generalmente no funciona para un RecyclerView. Necesita un LayoutManager personalizado y anula onMeasure.
wrap_content
no funciona con el LinearLayoutManager
predeterminado, utilice esta biblioteca en su lugar https://github.com/serso/android-linear-layout-manager
editar:
esto es cómo hacerlo agrega la siguiente dependencia a tu módulo build.gradle
compile 'org.solovyev.android.views:linear-layout-manager:0.5@aar'
y luego en su código
LinearLayoutManager layoutManager = new org.solovyev.android.views.llm.LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
- Cómo obtener una variable local de un subproceso ejecutables
- ¿Cómo puedo interceptar el intento cuando el usuario abre otra aplicación?