Представление переработчика Android studio не работает без ошибок

#java #android #android-recyclerview

#java #Android #android-recyclerview

Вопрос:

Итак, я пытался реализовать recycler view. Я видел несколько руководств по этому вопросу, но я все еще не совсем понимаю это. В моем коде нет ошибок, просто в activity не отображается ни один из элементов. Все пусто.

GalleryActivity.java Это мое целевое действие, чтобы показать представление recycler на

 package com.example.myapplication;

import android.os.Bundle;

import androidx.appcompat.widget.Toolbar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class GalleryActivity extends AppCompatActivity
{
    final String image_titles[] =
            {
                    "Img1",
                    "Img2",
                    "Img3",
                    "Img4",
                    "Img5",
                    "Img7",
                    "Img8"
            };

final Integer image_ids[] =
        {
                R.drawable.img1,
                R.drawable.img2,
                R.drawable.img3,
                R.drawable.img4,
                R.drawable.img5,
                R.drawable.img7,
                R.drawable.img8
        };
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_gallery);

    Toolbar tb = findViewById(R.id.galleryToolbar);
    setSupportActionBar(tb);

    RecyclerView rv = (RecyclerView)findViewById(R.id.imagegallery);
    rv.setHasFixedSize(true);
    rv.setLayoutManager(new GridLayoutManager(getApplicationContext(),2));
    ArrayList<CreateList> createLists = prepareData();
    MyAdapter adapter = new MyAdapter(getApplicationContext(), createLists);
    rv.setAdapter(adapter);

    getSupportActionBar().setTitle("Gallery");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}


ArrayList<CreateList> prepareData()
{
    ArrayList<CreateList> images = new ArrayList<>();

    for(int i = 0; i< image_titles.length; i  )
    {
        CreateList createList = new CreateList();
        createList.setImage_title(image_titles[i]);
        createList.setImage_ID(image_ids[i]);
        images.add(createList);
    }
    return images;
}
}
  

MyAdapter.java Это адаптер, я все еще не совсем понимаю, что здесь происходит, но вот код

 package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;


import java.util.ArrayList;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private ArrayList<CreateList> galleryList;
    private Context context;
public MyAdapter(Context context, ArrayList<CreateList> galleryList) {
    this.galleryList = galleryList;
    this.context = context;
}

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
    android.view.View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_adapter, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(MyAdapter.ViewHolder viewHolder, int i) {
    viewHolder.title.setText(galleryList.get(i).getImage_title());
    viewHolder.img.setScaleType(ImageView.ScaleType.CENTER_CROP);
    viewHolder.img.setImageResource((galleryList.get(i).getImage_ID()));
}

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

public class ViewHolder extends RecyclerView.ViewHolder
{
    private TextView title;
    private ImageView img;
    LinearLayout galleryLayout;
    public ViewHolder(View view)
    {
        super(view);

        title = (TextView)view.findViewById(R.id.title);
        img = (ImageView) view.findViewById(R.id.img);
        galleryLayout =(LinearLayout) view.findViewById(R.id.galleryLayout);
    }


}
}
  

CreateList.java создание списка в отдельном классе

 package com.example.myapplication;


public class CreateList
{
    private String image_title;
    private Integer image_id;

    public String getImage_title() {
        return image_title;
    }

    public void setImage_title(String android_version_name) {
        this.image_title = android_version_name;
    }

    public Integer getImage_ID() {
        return image_id;
    }

    public void setImage_ID(Integer android_image_url) {
        this.image_id = android_image_url;
    }



}
  

recycler_adapter.xml Дизайн представления ресайклера

   <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#FFFFFF"
android:id="@ id/galleryLayout">

<ImageView
    android:id="@ id/img"
    android:adjustViewBounds="true"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:src="@drawable/img3"/>
<TextView
    android:id="@ id/title"
    android:layout_gravity="center"
    android:textColor="#000"
    android:textStyle="bold"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />


</LinearLayout>
  

Редактировать:

fragment_gallery.xml

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.gallery.GalleryFragment">


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

</androidx.constraintlayout.widget.ConstraintLayout>
  

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

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

2. Пожалуйста, покажите содержимое fragment_gallery.xml

3. @art я отредактировал его, предоставив xml для fragment_gallery

4. Как именно вы запускаете GalleryActivity ? То есть, какой код вы используете, чтобы вывести это на экран?

5. @MikeM. Извините за эту ошибку, я все еще новичок в Android, все еще изучаю материал, и спасибо за помощь на самом деле!

Ответ №1:

После rv.setAdapter(adapter); также укажите adapter.notifyDataSetChanged(); Мы должны указать эту строку, чтобы уведомить адаптер.

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

1. Это не сработало для меня, на самом деле все та же проблема