android activity调用Adapter方法刷新列表UI,RecyclerView.Adapter

本文介绍了一个具体的RecyclerView适配器实现案例,包括自定义ViewHolder、数据绑定、点击事件处理及全选功能。通过示例代码展示了如何在Android应用中有效使用RecyclerView进行数据展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在adapter中创建被调用方法cleckAll

public class JYfkleixinAdapter extends RecyclerView.Adapter<JYfkleixinAdapter.ViewHolder> {
    private Context context;
    private OnItemClickListener mOnItemClickListener;
    private List<JyfkEntity> entityList;



    public JYfkleixinAdapter(Context context, List<JyfkEntity> entities) {
        this.context = context;
        this.entityList = entities;
    }



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

    @Override
    public void onBindViewHolder(final JYfkleixinAdapter.ViewHolder holder, int position) {
        JyfkEntity entity = entityList.get(position);

//        ImageManager.loadBitmap(context, entity.getBimage(), R.mipmap.itemx_03, holder.item_intnb_image);
        try{
            holder.jyfkte.setText(entity.getName());//网吧名称

            if (entity.isIfselect()){
                holder.jyfkimage.setSelected(true);
            }else {
                holder.jyfkimage.setSelected(false);
            }

        }catch(Exception e){
            e.printStackTrace();
        }
        //判断是否设置了监听器
        if (mOnItemClickListener != null) {
            //为ItemView设置监听器-
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position = holder.getLayoutPosition(); // 1
                    mOnItemClickListener.onItemClick(holder.itemView, position); // 2
                }
            });

        }
    }

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


    public class ViewHolder extends RecyclerView.ViewHolder {

        @BindView(R.id.jyfkte)
        TextView jyfkte;
        @BindView(R.id.jyfkimage)
        ImageView jyfkimage;


        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.mOnItemClickListener = onItemClickListener;
    }

    //  删除 打勾 全选
    public void cleckAll(int  is_checked) { //全选 删除多少那里要删除全部
        for (int a = 0;a<entityList.size();a++){
            if (is_checked==a){
                entityList.get(a).setIfselect(true);
            }else {
                entityList.get(a).setIfselect(false);
            }
        }
        notifyDataSetChanged();
    }

}

 

在activity中调用刷新UI

 

public void initrecyclerview(){
    barAdapter = new JYfkleixinAdapter(JYfkActivity.this,barEntityList);
    barAdapter.setOnItemClickListener(new JYfkleixinAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
            barAdapter.cleckAll(position);
            jylx = barEntityList.get(position).getName();
        }
    });
    jyfkrecyclerview.setLayoutManager(new LinearLayoutManager(JYfkActivity.this));
    jyfkrecyclerview.setAdapter(barAdapter);
    jyfkrecyclerview.setNestedScrollingEnabled(false);//禁止滑动
    jyfkrecyclerview.setFocusable(false);//导航栏切换不再focuse
}

adpter工具类

public abstract class BaseRecyclerAdapter<T>
        extends RecyclerView.Adapter<BaseRecyclerAdapter.CommonHolder> {

    private BaseRecyclerAdapter.OnItemClickListener mOnItemClickListener;
    private BaseRecyclerAdapter.OnItemLongClickListener mOnItemLongClickListener;

    public interface OnItemClickListener {
        void onItemClick(ViewGroup parent,BaseRecyclerAdapter.CommonHolder holder, int position);
    }

    public interface OnItemLongClickListener {
        boolean onItemLongClick(ViewGroup parent,BaseRecyclerAdapter.CommonHolder holder, int position);
    }

    protected final ArrayList<T> mData;

    public BaseRecyclerAdapter() {
        mData = new ArrayList<>();
    }

    @Override
    public BaseRecyclerAdapter.CommonHolder onCreateViewHolder(final ViewGroup parent, int viewType) {

        final BaseRecyclerAdapter.CommonHolder commonHolder = createCommonHolder(parent, viewType);

        View view = commonHolder.itemView;

        setChildViewListener(commonHolder, viewType);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnItemClickListener != null
                        && commonHolder.getAdapterPosition() != RecyclerView.NO_POSITION) {

                    mOnItemClickListener.onItemClick(parent, commonHolder,
                            commonHolder.getAdapterPosition());
                }
            }
        });

        view.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                if (mOnItemLongClickListener != null
                        && commonHolder.getAdapterPosition() != RecyclerView.NO_POSITION) {

                    return mOnItemLongClickListener.onItemLongClick(parent, commonHolder,
                            commonHolder.getAdapterPosition());
                } else {
                    return false;
                }
            }
        });

        return commonHolder;
    }

    /**
     * 创建通用Holder,子类可以重写这个方法
     *
     * @param parent
     * @param viewType
     * @return
     */
    public BaseRecyclerAdapter.CommonHolder createCommonHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(getItemLayoutId(viewType), parent, false);
        return new BaseRecyclerAdapter.CommonHolder(view);
    }

    /**
     * 设置子控件的监听事件,可以通过{@link RecyclerView.ViewHolder#getAdapterPosition()}拿到item的位置
     *
     * @param holder
     */
    public void setChildViewListener(BaseRecyclerAdapter.CommonHolder holder, int viewType) {
        // 默认空实现

    }

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

    public List<T> getData() {
        return mData;
    }

    /**
     * 获取item布局
     *
     * @return
     */
    public abstract int getItemLayoutId(int viewType);

    /**
     * 删除数据
     *
     * @param position
     */
    public void delete(int position) {
        mData.remove(position);
        notifyDataSetChanged();
    }

    /**
     * 获取item
     *
     * @param position
     * @return
     */
    public T getItem(int position) {
        return mData.get(position);
    }

    /**
     * 设置新数据
     *
     * @param data
     */
    public void setNewData(List<? extends T> data) {
        mData.clear();
        if (data != null) {
            mData.addAll(data);
        }
        notifyDataSetChanged();
    }

    /**
     * 追加数据
     *
     * @param data
     */
    public void appendData(List<? extends T> data) {
        if (data != null && data.size() > 0) {
            mData.addAll(data);
            notifyDataSetChanged();
        }
    }

    /**
     * 添加单个数据
     *
     * @param data
     */
    public void addData(T data) {
        if (data != null) {
            mData.add(data);
            notifyDataSetChanged();
        }
    }

    /**
     * 设置点击事件
     *
     * @param onItemClickListener
     */
    public void setOnItemClickListener(BaseRecyclerAdapter.OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }

    /**
     * 设置长按事件
     *
     * @param onItemLongClickListener
     */
    public void setOnItemLongClickListener(BaseRecyclerAdapter.OnItemLongClickListener onItemLongClickListener) {
        mOnItemLongClickListener = onItemLongClickListener;
    }

    public static class CommonHolder extends RecyclerView.ViewHolder {

        private SparseArray<View> mViews;

        public CommonHolder(View itemView) {
            super(itemView);
            mViews = new SparseArray<>();
        }

        public Context getContext() {
            return itemView.getContext();
        }

        public Resources getResource() {
            return itemView.getResources();
        }

        public <V extends View> V getView(int id) {
            View view = mViews.get(id);
            if (view == null) {
                view = itemView.findViewById(id);
                mViews.put(id, view);
            }
            return (V) view;
        }

        public void setText(int id, CharSequence text) {
            ((TextView) getView(id)).setText(text);
        }

        public TextView getText(int id) {
            return getView(id);
        }

        public ImageView getImage(int id) {
            return getView(id);
        }
    }
}

实现方法

public class ShebeilistAdapter extends BaseRecyclerAdapter<String> {

    private Context mContext;
    private ClickListener mClickListener;

    @Override
    public int getItemLayoutId(int viewType) {
        return R.layout.item_shebei;
    }

    public ShebeilistAdapter(Context context) {
        this.mContext = context;
    }

    @Override
    public void onBindViewHolder(CommonHolder holder, final int position) {
        TextView pic = holder.getText(R.id.namete);
        pic.setText(getItem(position));
        LinearLayout linearLayout = holder.getView(R.id.bgli);
//        if (position%2==0){
//            linearLayout.setBackgroundColor(Color.parseColor ("#7Fe5e5e5"));
//        }else {
//            linearLayout.setBackgroundColor(Color.parseColor ("#ffffff"));
//        }

    }



    public void setClickListener(ClickListener clickListener) {
        this.mClickListener = clickListener;
    }

    public interface ClickListener {
        void add(int position);


        void preview(int position);
    }

}

 

调用方法

ShebeilistAdapter adapter;

 

adapter = new ShebeilistAdapter(this);
adapter.setNewData(list);
helper.setText(R.id.tx_username, item.getNickname())
        .setText(R.id.tx_time, NewsTimeChangeUtil.getTimeFormatText(new Date(item.getCtime() * 1000)))
        .setText(R.id.tx_content, item.getContent())
        .setText(R.id.tx_discuss_num, item.getComment() + "")
        .setText(R.id.cb_zan_num, item.getLikes() + "")
        .addOnClickListener(R.id.cb_collect)
mAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
    @Override
    public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
        switch (view.getId()) {
            case R.id.ll_cb_collectjb:
                Log.e("lgqhttp","举报。。。。");
                break;

 

 

 

 

 

Android E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.mysmartcity, PID: 29976 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 7(offset:7).state:10 androidx.recyclerview.widget.RecyclerView{a237af0 VFED..... ........ 0,0-1080,2021 #7f090131 app:id/list}, adapter:com.example.mysmartcity.adapter.PayNews2Adapter@630a869, layout:androidx.recyclerview.widget.LinearLayoutManager@3de2ee, context:com.example.mysmartcity.ui.pay.PayNewsListActivity@f6877d0 at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6183) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114) at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303) at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627) at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587) at androidx.recyclerview.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1391) at androidx.recyclerview.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1128) at androidx.recyclerview.widget.RecyclerView.scrollStep(RecyclerView.java:1841) at androidx.recyclerview.widget.RecyclerView.scrollByInternal(RecyclerView.java:1940) at androidx.recyclerview.widget.RecyclerView.onTouchEvent(RecyclerView.java:3391) at android.view.View.dispatchTouchEvent(View.java:14668) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3216) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2853) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222) at android.view.ViewGroup.dispatchTouchEvent(ViewGro
最新发布
03-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值