Create a Generic Base Adapter?

前端 未结 4 1688
粉色の甜心
粉色の甜心 2020-12-01 16:45

I am interested in creating a generic BaseAdapter which will apply to any ListView having any list_item . And it will set the item_row for the list_view.

            


        
4条回答
  •  旧巷少年郎
    2020-12-01 17:38

    Answering my own Question after two years.

    In order to make Generic Adapter you need abstract methods in parent class which should be implemented by child. So GenericAdapter must be Abstract and create abstract methods for data you want to change.

    I have different types of ArrayList to show in Adapter only it's model class is different. So I decided to write a genericAdapter. This is for recyclerview if someOne interested for listview. Let me know.

    GenericAdapter

    public abstract class GenericAdapter extends RecyclerView.Adapter {
    
        private Context context;
        private ArrayList items;
    
        public abstract RecyclerView.ViewHolder setViewHolder(ViewGroup parent);
    
        public abstract void onBindData(RecyclerView.ViewHolder holder, T val);
    
        public GenericAdapter(Context context, ArrayList items){
            this.context = context;
            this.items = items;
        }
    
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            RecyclerView.ViewHolder holder = setViewHolder(parent);
            return holder;
        }
    
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            onBindData(holder,items.get(position));
        }
    
        @Override
        public int getItemCount() {
            return items.size();
        }
    
        public void addItems( ArrayList savedCardItemz){
            items = savedCardItemz;
            this.notifyDataSetChanged();
        }
    
        public T getItem(int position){
            return items.get(position);
        }
    }
    

    And I use it like

         adapter = new GenericAdapter(context,modelList) {
            @Override
            public RecyclerView.ViewHolder setViewHolder(ViewGroup parent) {
                final View view =            LayoutInflater.from(context).inflate(R.layout.item_view_holder, parent, false);
                ItemViewHolder viewHolder = new ItemViewHolder(context, view);
                return viewHolder;
            }
    
            @Override
            public void onBindData(RecyclerView.ViewHolder holder1, DataModel val) {
                    DataModel userModel = val;
    
                    ItemViewHolder holder = (ItemViewHolder)holder1;
                    holder.name.setText(userModel.getName());
                    holder.fatherName.setText(userModel.getFatherName());
            }
        };
        mRecyclerView.setAdapter(adapter);
    

    RecyclerView with Search sort functionality

提交回复
热议问题