изображения и текст не отображаются в cardview

#java #android

#java #Android

Вопрос:

Я использую представление карты с помощью RecyclerView.Проблема, с которой я сталкиваюсь, заключается в том, что на карточках не отображаются изображения и текст, которые должны отображаться, все, что я получаю, это пустые карточки. как-нибудь я мог бы это исправить или я делаю что-то не так?

 avctivitymain xml

<?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:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:padding="8dp">

    <android.support.v7.widget.RecyclerView
        android:id="@ id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>

</LinearLayout>
  

cardsport xml

 <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp"
    android:layout_height="190dp"
    android:id="@ id/car_lay"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:cardview="http://schemas.android.com/tools"
    android:layout_margin="5dp"
   app:cardCornerRadius="4dp">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@ id/sport_image"
            android:layout_width="match_parent"
            android:layout_height="160dp"
            android:scaleType="centerCrop"/>

        <TextView
            android:id="@ id/sport_title"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="14sp"
            android:gravity="center"
            android:text="frgrggr"
            android:textColor="#2d2d2d"/>

    </LinearLayout>

</android.support.v7.widget.CardView>
  

класс адаптера recyclerview

 import java.util.List;

public class Recycler_view extends RecyclerView.Adapter<Recycler_view.myViewHolder>
{

    private Context mContext;
    private List<card> mData;

    public Recycler_view(Context mContext, List<card> mData)
    {
        this.mContext = mContext;
        this.mData = mData;
    }

    @NonNull
    @Override
    public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
    {

        View v;
        LayoutInflater mflate = LayoutInflater.from(mContext);
        v = mflate.inflate(R.layout.card_sport,parent,false);
        return new myViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull myViewHolder holder, int position)
    {

        holder.sport_txt.setText(mData.get(position).getType_sport());
        holder.image_view.setImageResource(mData.get(position).getImages());

    }

    @Override
    public int getItemCount()
    {
        return mData.size();
    }

    public static class myViewHolder extends RecyclerView.ViewHolder
    {

        TextView sport_txt;
        ImageView image_view;
        CardView cv;

        public myViewHolder(View itemView)
         {
            super(itemView);

            sport_txt = itemView.findViewById(R.id.sport_title);
            image_view = itemView.findViewById(R.id.sport_image);
            cv = itemView.findViewById(R.id.car_lay);
        }
    }


}
  

Main activity java class

 import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity
{

    List<card> card_sport;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        card_sport = new ArrayList<>();
        // ADDING DATA TO THE CARD ARRAYLIST
        card_sport.add(new card("soccer",R.drawable.soccer));
        card_sport.add(new card("Cage Fighting",R.drawable.cagef));
        card_sport.add(new card("Cricket",R.drawable.cricket));
        card_sport.add(new card("WaterPolo",R.drawable.polo));
        card_sport.add(new card("Running",R.drawable.runman));
        card_sport.add(new card("Swimming",R.drawable.swim));
        card_sport.add(new card("Rugby",R.drawable.rugby));

        RecyclerView rv = findViewById(R.id.recyclerview);
        Recycler_view re_adapter = new Recycler_view(this, card_sport);
        rv.setLayoutManager(new GridLayoutManager(this,2));
        rv.setAdapter(re_adapter);




    }
}
  

класс card java для методов получения и установки

 package com.example.dalian.cool_jungle;           

public class card                                 
{                                                 
    private String type_sport;                    
    private int images;                           


    public card()                                 
    {                                             

    }                                             



    public card(String type_sport,int images)     
    {                                             
        type_sport= type_sport;                   
        images = images;                          
    }                                             

    public String getType_sport()                 
    {                                             
        return type_sport;                        
    }                                             

    public int getImages()                        
    {                                             
        return images;                            
    }                                             

    public void setType_sport()                   
    {                                             
        type_sport =type_sport;                   
    }                                             

    public void setImages()                       
    {                                             
        images = images;                          
    }                                             




}  
  

журнал

строка 17

строка 47

после удаления «this» из моего класса card он просто показывает пустые карточки

Комментарии:

1.в вашем cardsport xml layout_height из textview должен быть wrap_content.

Ответ №1:

Весь приведенный выше код в порядке. Проблем не будет, если вы правильно создали свой объект card. Это может быть похоже:

 public class card {
    private String type_sport;
    private int image;

    public card(String type_sport, int image) {
        this.type_sport = type_sport;
        this.image = image;
    }

    public String getType_sport() {
        return type_sport;
    }

    public void setType_sport(String type_sport) {
        this.type_sport = type_sport;
    }

    public int getImages() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }
}
  

Комментарии:

1. это тоже изменилось и все еще сбой

2. Разве я не должен где-то использовать установленные методы. в конце концов, они есть в коде?

3. вы можете избежать методов set.

4. когда я извлекаю «это» из своего кода, карточки отображаются пустыми, я действительно не знаю, что не так

Ответ №2:

Вам не нужно передавать контекст, вы можете получить его из родительской viewgroup. Вам также не нужно делать view holder статическим классом, это может помочь.

Комментарии:

1. Спасибо за это. Но выяснил, что было не так. Мои изображения были слишком большими.