java - recyclerView中的setAdapter无法应用

标签 java android gridview android-recyclerview

所以我按照在线教程制作了一种画廊应用程序。图片显示在 GridView 内,但我需要将其更改为 recyclerview。当我这样做时,虽然我收到了该错误,但我的适配器似乎无法与 recyclerview 一起使用。这是我的适配器代码:

    class AlbumAdapter extends BaseAdapter {
        private Activity activity;
        private ArrayList<HashMap< String, String >> data;
        public AlbumAdapter(Activity a, ArrayList < HashMap < String, String >> d) {
            activity = a;
            data = d;
        }
        public int getCount() {
            return data.size();
        }
        public Object getItem(int position) {
            return position;
        }
        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            AlbumViewHolder holder = null;
            if (convertView == null) {
                holder = new AlbumViewHolder();
                convertView = LayoutInflater.from(activity).inflate(
                        R.layout.album_row, parent, false);

                holder.galleryImage = (ImageView) convertView.findViewById(R.id.galleryImage);
                holder.gallery_count = (TextView) convertView.findViewById(R.id.gallery_count);
                holder.gallery_title = (TextView) convertView.findViewById(R.id.gallery_title);

                convertView.setTag(holder);
            } else {
                holder = (AlbumViewHolder) convertView.getTag();
            }
            holder.galleryImage.setId(position);
            holder.gallery_count.setId(position);
            holder.gallery_title.setId(position);

            HashMap < String, String > song = new HashMap < String, String > ();
            song = data.get(position);
            try {
                holder.gallery_title.setText(song.get(Function.KEY_ALBUM));
                holder.gallery_count.setText(song.get(Function.KEY_COUNT));

                Glide.with(activity)
                        .load(new File(song.get(Function.KEY_PATH))) // Uri of the picture
                        .into(holder.galleryImage);


            } catch (Exception e) {}
            return convertView;
        }
    }
    class AlbumViewHolder {
        ImageView galleryImage;
        TextView gallery_count, gallery_title;
    }

这是我在其中设置适配器的 Activity 中的一些代码:

@Override
    protected void onPostExecute(String xml) {

        AlbumAdapter adapter = new AlbumAdapter(ProfileActivity.this, albumList);
        galleryGridView.setAdapter(adapter);
        galleryGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    final int position, long id) {
                Intent intent = new Intent(ProfileActivity.this, AlbumActivity.class);
                intent.putExtra("name", albumList.get(+position).get(Function.KEY_ALBUM));
                startActivity(intent);
            }
        });
    }

这是我当前遇到的错误: Error message

我基本上想修复适配器,以便它在回收器 View 中工作。

最佳答案

您必须创建 RecyclerView.Adapter 才能使用 RecyclerView。 BaseAdapter 有点不同。让我举例说明如何实现这一点。

public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder> {

 @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.album_row, viewGroup, false);
        return new AlbumAdapter.ViewHolder(view);
    }

@Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        holder.galleryImage.setId(position);
        holder.gallery_count.setId(position);
        holder.gallery_title.setId(position);
    }
 @Override
    public int getItemCount() {
        return data.size();
    }

public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView galleryImage;
    TextView gallery_count, gallery_title;
 public ViewHolder(View v) {
            galleryImage = v.findViewById(R.id.galleryImage);
            gallery_count =v.findViewById(R.id.gallery_count);
            gallery_title = v.findViewById(R.id.gallery_title);
    }
  }
}

关于java - recyclerView中的setAdapter无法应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826992/

相关文章:

java - 在java中生成唯一值给出重复项

c# - java和c#中泛型的语法差异

Android R8 fragment 实现但实际上匹配扩展

html - 带有框阴影的 CSS 列问题

c# - WinRT 中带包装的 GridView 方向

java - 额外的 'if checks' 如果该值已经设置 - 什么更快,什么使用更多资源?

java - 不使用 Map 或 Set 成对排序列表

android - 在 DrawerLayout 中添加 RecyclerView

android - 无法在 android studio 中访问 OKHttp 包,但从 Okhttp 包中抛出异常?

c# - 如何获取隐藏单元格的值?