#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. Это не сработало для меня, на самом деле все та же проблема