RecyclerView(多条目)+点击删除,长按动画(MVP格式)

本文介绍了一个基于Android平台的应用,使用RecyclerView实现动态加载不同类型的UI组件,并通过Adapter进行数据绑定及事件处理。文章详细展示了如何根据不同数量的图片资源来选择不同的布局方式,并实现了点击和长按事件响应。

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

//MainActivity

public class MainActivity extends BaseActivity<MainPresenter> implements MainView {

    private RecyclerView recyclerView;

    @Override
    protected void initData() {
        presenter.login();
    }

    @Override
    protected void initListance() {

    }

    @Override
    protected void initView() {
        recyclerView = findViewById(R.id.recycler);
    }

    @Override
    protected MainPresenter providPresenter() {
        return new MainPresenter(this);
    }

    @Override
    protected int provideLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    public void onMainSuccess(UserBean userBean) {
        final List<UserBean.DataBeanX.DataBean> list = userBean.getData().getData();
        final MyAdapter myAdapter = new MyAdapter(list);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(myAdapter);
        myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void OnItemClick(View view, int position) {
                ObjectAnimator alpha = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f, 1f);
                alpha.setDuration(8000);
                alpha.start();
            }
        });
        myAdapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
            @Override
            public void OnItemLongClick(View view, final int position) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("删除");
                builder.setMessage("确定删除吗?");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        list.remove(position);
                        myAdapter.notifyDataSetChanged();
                    }
                });
                builder.setNegativeButton("取消",null);
                builder.show();
            }
        });
    }

    @Override
    public void onMainFailure(String error) {

    }

    @Override
    public Context context() {
        return this;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}




//Adapter

public class MyAdapter extends RecyclerView.Adapter{
    private List<UserBean.DataBeanX.DataBean> list;
    private View view;

    public MyAdapter(List<UserBean.DataBeanX.DataBean> list) {
        this.list = list;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType==0){
            view = View.inflate(parent.getContext(), R.layout.layout1, null);
            return new MainItem1(view);
        }else {
            view=View.inflate(parent.getContext(),R.layout.layout2,null);
            return new MainItem2(view);
        }
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
        int itemViewType = getItemViewType(position);
        switch (itemViewType){
            case 0:
                ((MainItem1)holder).textView.setText(list.get(position).getTitle());
                String img="http://365jia.cn/uploads/"+list.get(position).getPics().get(0);
                ImageLoader.getInstance().displayImage(img,((MainItem1)holder).imageView, MyApp.getOptions());
                ((MainItem1)holder).imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onItemClickListener.OnItemClick(v,position);
                    }
                });
                ((MainItem1)holder).textView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        onItemLongClickListener.OnItemLongClick(v,position);
                        return true;
                    }
                });
                break;
            case 1:
                ((MainItem2)holder).textView.setText(list.get(position).getTitle());
                String img1="http://365jia.cn/uploads/"+list.get(position).getPics().get(0);
                String img2="http://365jia.cn/uploads/"+list.get(position).getPics().get(1);
                String img3="http://365jia.cn/uploads/"+list.get(position).getPics().get(2);
                ImageLoader.getInstance().displayImage(img1,((MainItem2)holder).imageView1,MyApp.getOptions());
                ImageLoader.getInstance().displayImage(img2,((MainItem2)holder).imageView2,MyApp.getOptions());
                ImageLoader.getInstance().displayImage(img3,((MainItem2)holder).imageView3,MyApp.getOptions());
                ((MainItem2)holder).textView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        onItemLongClickListener.OnItemLongClick(v,position);
                        return true;
                    }
                });
                ((MainItem2)holder).imageView1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onItemClickListener.OnItemClick(v,position);
                    }
                });
                ((MainItem2)holder).imageView2.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onItemClickListener.OnItemClick(v,position);
                    }
                });
                ((MainItem2)holder).imageView3.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onItemClickListener.OnItemClick(v,position);
                    }
                });
                break;
        }
    }

    @Override
    public int getItemCount() {
        return list==null?0:list.size();
    }

    @Override
    public int getItemViewType(int position) {
        List<String> pics = list.get(position).getPics();
        if (pics.size()==1){
            return 0;
        }
        return 1;
    }

    private class MainItem1 extends RecyclerView.ViewHolder {

        private final TextView textView;
        private final ImageView imageView;

        public MainItem1(View view) {
            super(view);
            textView = view.findViewById(R.id.layout1_text);
            imageView = view.findViewById(R.id.layout_image);
        }
    }

    private class MainItem2 extends RecyclerView.ViewHolder {

        private final TextView textView;
        private final ImageView imageView1;
        private final ImageView imageView2;
        private final ImageView imageView3;

        public MainItem2(View view) {
            super(view);
            textView = view.findViewById(R.id.layout2_text);
            imageView1 = view.findViewById(R.id.layout2_image1);
            imageView2 = view.findViewById(R.id.layout2_image2);
            imageView3 = view.findViewById(R.id.layout2_image3);
        }
    }
    private OnItemClickListener onItemClickListener;
    public void setOnItemClickListener(OnItemClickListener onItemClickListener){
        this.onItemClickListener=onItemClickListener;
    }
    public interface OnItemClickListener{
        void OnItemClick(View view,int position);
    }
    private OnItemLongClickListener onItemLongClickListener;
    public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener){
        this.onItemLongClickListener=onItemLongClickListener;
    }
    public interface OnItemLongClickListener{
        void OnItemLongClick(View view,int position);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值