#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;
}
}
после удаления «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. Спасибо за это. Но выяснил, что было не так. Мои изображения были слишком большими.