簡體   English   中英

如何將BaseAdapter轉換為RecyclerAdapter

[英]How do I convert my BaseAdapter to a RecyclerAdapter

所以我想將GridView更改為RecyclerView並且不得不將BaseAdapter更改為RecyclerAdapter 我已經嘗試進行更改,但是不知道如何將代碼切換到RecyclerAdapter 這是我的BaseAdapter樣子:

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;
}

並預先感謝!

只需使用此功能,即可隨時進行修改以適合您的需要,請確保閱讀注釋,因為它們確實可以幫助您了解一些內容。

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

    private static final String KEY_ALBUM = "KEY_ALBUM";
    private static final String KEY_COUNT = "KEY_COUNT";
    private static final String KEY_PATH = "KEY_PATH";

    private itemClickInterface clickInterface;
    //private List<String> data;
    private ArrayList<HashMap<String, String >> data;

//    public AlbumAdapter(itemClickInterface clickInterface, List<String> data) { // Forget about this if your data is not an array of Strings.
//    public AlbumAdapter(itemClickInterface clickInterface, ArrayList<HashMap< String, String >> data) { // Forget about this if you're not ready to pass an onclick interface
    public AlbumAdapter(ArrayList<HashMap< String, String >> data) {
        this.data = data;
//        this.clickInterface = clickInterface; //Simply ignore since you're not passing an interface of clicklister
    }

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

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        try {
            final String data_for_albums = this.data.get(position).get(KEY_ALBUM);
            final String data_for_counts = this.data.get(position).get(KEY_COUNT);
            final String data_for_paths = this.data.get(position).get(KEY_PATH);

            holder.gallery_title.setText(data_for_albums);
            holder.gallery_count.setText(data_for_counts);

            Glide.with(activity)
                    .load(new File(data_for_paths)) // Uri of the picture
                    .into(holder.galleryImage);



            /*
            * You can modify this as you want.
            * */
//            holder.galleryImage.setOnClickListener(new View.OnClickListener() {
//                @Override
//                public void onClick(View v) {
//                    clickInterface.click(data_for_paths); // This depends on you.
//                }
//            });

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

    /*--------------------------------------------------------------------------------------
     |                          GET REFERENCES TO VIEWS HERE
     *--------------------------------------------------------------------------------------*/
    class ViewHolder extends RecyclerView.ViewHolder {
        ImageView galleryImage;
        TextView gallery_count, gallery_title;

        ViewHolder(View itemView) {
            super(itemView);
            galleryImage = itemView.findViewById(R.id.galleryImage);
            gallery_count = itemView.findViewById(R.id.gallery_count);
            gallery_title = itemView.findViewById(R.id.gallery_title);
        }
    }
}

如何從我們的活動中致電

ArrayList<HashMap<String, String >> data = new ArrayList<>();
        //I'm assuming you already feed your data, so you're not passing null like me here.

        cardlistview = findViewById(R.id.cardlistview);

        albumAdapter = new AlbumAdapter(your_arraysOfHashMap);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        cardlistview.setLayoutManager(mLayoutManager);
        cardlistview.setAdapter(albumAdapter);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM