安卓开发多选列表和回显已选择内容

这篇具有很好参考价值的文章主要介绍了安卓开发多选列表和回显已选择内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景

安卓日常开发和学习过程中,经常会碰到需要多选列表和显示已选择内容的场景,本文将介绍安卓实现多选列表和回显已选择内容的一种方案。

问题分析

话不多说,先上效果:
安卓开发多选列表和回显已选择内容

思路分析:
一个纵向列表显示待选择内容,一个横向列表用来显示已选择内容,点击待选列表和已选择列表的item都可以更新页面内容。

问题解决

话不多说,直接上代码。
(1)页面布局文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MultiChooseActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:textSize="18sp"
            android:text="已选择:"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/chosedList"
            android:layout_gravity="center_vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <View
        android:layout_marginTop="3dp"
        android:layout_marginBottom="3dp"
        android:layout_width="match_parent"
        android:background="@color/black"
        android:layout_height="1dp"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/choicesList"
        android:layout_width="150dp"
        android:layout_height="wrap_content"/>
</LinearLayout>

(2)activity代码如下:

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.baorant.multichoosecomponent.adapter.Callback;
import com.baorant.multichoosecomponent.adapter.ChoosedAdapter;
import com.baorant.multichoosecomponent.adapter.MultiChooseAdapter;
import com.baorant.multichoosecomponent.databinding.ActivityMultiChooseBinding;
import com.baorant.multichoosecomponent.entity.ChoiceBean;

import java.util.ArrayList;
import java.util.List;

public class MultiChooseActivity extends AppCompatActivity {
    ActivityMultiChooseBinding binding;
    MultiChooseAdapter multiChooseAdapter;
    ChoosedAdapter choosedAdapter;

    /**
     * 所有选项
     */
    List<ChoiceBean> choiceBeans = new ArrayList<>();
    /**
     * 已选择列表
     */
    List<ChoiceBean> choseBeans = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initView();

        initData();
    }

    private void initView() {
        binding = ActivityMultiChooseBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        binding.choicesList.setLayoutManager(linearLayoutManager);
        multiChooseAdapter = new MultiChooseAdapter(this, choiceBeans, new Callback() {
            @Override
            public void callback(ChoiceBean data) {
                if (choiceBeans == null || choosedAdapter == null) {
                    return;
                }
                if (data.isBtnStatus()) {
                    choseBeans.add(data);
                } else {
                    choseBeans.remove(data);
                }
                choosedAdapter.notifyDataSetChanged();
            }
        });
        binding.choicesList.setAdapter(multiChooseAdapter);

        LinearLayoutManager linearLayoutManager1 = new LinearLayoutManager(this, RecyclerView.HORIZONTAL, false);
        binding.chosedList.setLayoutManager(linearLayoutManager1);
        choosedAdapter = new ChoosedAdapter(this, choseBeans, new Callback() {
            @Override
            public void callback(ChoiceBean data) {
                for (ChoiceBean choiceBean : choiceBeans) {
                    if (choiceBean.getTitle().equals(data.getTitle())) {
                        choiceBean.setBtnStatus(false);
                        break;
                    }
                }
                multiChooseAdapter.notifyDataSetChanged();
            }
        });
        binding.chosedList.setAdapter(choosedAdapter);
    }

    private void initData() {
        for(int i = 0; i < 10; i++) {
            choiceBeans.add(new ChoiceBean("第" + i + "个选项"));
        }
        multiChooseAdapter.notifyDataSetChanged();
    }
}

(3)待选择列表对应adapter,代码如下:

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.baorant.multichoosecomponent.R;
import com.baorant.multichoosecomponent.entity.ChoiceBean;

import java.util.List;

/**
 * 多选adapter
 */
public class MultiChooseAdapter extends RecyclerView.Adapter<MultiChooseAdapter.ListViewHolder> {

    /**
     * 数据源
     */
    private List<ChoiceBean> dataList;
    private Context context;
    private Callback callback;

    public MultiChooseAdapter(Context context, List<ChoiceBean> dataList) {
        this.context = context;
        this.dataList = dataList;
    }

    public MultiChooseAdapter(Context context, List<ChoiceBean> dataList, Callback callback) {
        this.context = context;
        this.dataList = dataList;
        this.callback = callback;
    }

    @NonNull
    @Override
    public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.item_mulit_choose, null);
        return new ListViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ListViewHolder holder, int position) {
        holder.tvTitle.setText(dataList.get(position).getTitle());
        if (dataList.get(position).isBtnStatus()) {
            holder.ivChoose.setImageResource(R.drawable.choose);
        } else {
            holder.ivChoose.setImageResource(R.drawable.not_choose);
        }
        holder.ivChoose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 把选中状态存到数据源类
                ChoiceBean data = dataList.get(position);
                // 取反状态值,赋值
                data.setBtnStatus(!data.isBtnStatus());
                // 刷新当前item
                notifyItemChanged(position);
                if (callback != null) {
                    callback.callback(data);
                }
            }
        });
    }

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

    public class ListViewHolder extends RecyclerView.ViewHolder {
        public TextView tvTitle;
        public ImageView ivChoose;

        public ListViewHolder(@NonNull View itemView) {
            super(itemView);
            tvTitle = itemView.findViewById(R.id.title);
            ivChoose = itemView.findViewById(R.id.status);
        }
    }

}

(4)已选择列表对应的adapter,代码如下:

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.baorant.multichoosecomponent.R;
import com.baorant.multichoosecomponent.entity.ChoiceBean;

import java.util.List;

/**
 * 已选列表adapter
 */
public class ChoosedAdapter extends RecyclerView.Adapter<ChoosedAdapter.ListViewHolder> {

    /**
     * 数据源
     */
    private List<ChoiceBean> dataList;
    private Context context;
    private Callback callback;


    public ChoosedAdapter(Context context, List<ChoiceBean> dataList) {
        this.context = context;
        this.dataList = dataList;
    }

    public ChoosedAdapter(Context context, List<ChoiceBean> dataList, Callback callback) {
        this.context = context;
        this.dataList = dataList;
        this.callback = callback;
    }

    @NonNull
    @Override
    public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.item_choosed, null);
        return new ListViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ListViewHolder holder, int position) {
        holder.tvTitle.setText(dataList.get(position).getTitle());
        holder.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (callback != null) {
                    callback.callback(dataList.get(position));
                }

                dataList.remove(position);
                notifyDataSetChanged();
            }
        });
    }

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

    public class ListViewHolder extends RecyclerView.ViewHolder {
        public TextView tvTitle;
        public ImageView delete;

        public ListViewHolder(@NonNull View itemView) {
            super(itemView);
            tvTitle = itemView.findViewById(R.id.title);
            delete = itemView.findViewById(R.id.delete);
        }
    }

}

(5)item_choosed.xml文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MultiChooseActivity">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        tools:text="标题" />

    <ImageView
        android:id="@+id/delete"
        android:layout_toEndOf="@id/title"
        android:src="@drawable/delete"
        android:layout_width="12dp"
        android:layout_height="12dp"
        android:layout_centerVertical="true"/>
</RelativeLayout>

(6)item_mulit_choose.xml文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="50dp"
    android:layout_height="20dp"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MultiChooseActivity">

    <TextView
        android:id="@+id/title"
        android:textSize="18sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        tools:text="标题" />

    <ImageView
        android:id="@+id/status"
        android:layout_alignParentEnd="true"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_centerVertical="true"
        tools:src="@drawable/choose"/>
</RelativeLayout>

(7)选项实体类,代码如下:

/**
 * 选项实体类
 */
public class ChoiceBean {
    private String title;
    // false代表未选中,true 选中
    private boolean btnStatus = false;

    public ChoiceBean(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public boolean isBtnStatus() {
        return btnStatus;
    }

    public void setBtnStatus(boolean btnStatus) {
        this.btnStatus = btnStatus;
    }
}


问题总结

本文介绍了安卓实现多选列表和回显已选择内容的一种方案,有兴趣的同学可以进一步深入研究。文章来源地址https://www.toymoban.com/news/detail-462990.html

到了这里,关于安卓开发多选列表和回显已选择内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot +Vue + element-ui实现图片上传和回显

    对于图片上传和显示后台采用SpringBoot实现: 这里要特别注意的是:参数名称必须是 file, 必须是post方式! 前端Vue: 图片上传: 新增: 图片的显示:

    2024年02月13日
    浏览(50)
  • Vue:实现输入框/选择列表内容更改,页面实时预览多个内容变化

    在各种前端页面中,比如用户信息注册的页面,往往有多个输入框和多个选项列表。 为了避免用户选错或者输入错误,可以在前端页面上实时将多个输入框的内容拼接起来,显示到页面或者弹出的窗口中,帮助用户核对、检查输入的内容是否有错,提高用户体验。 本文介绍

    2024年02月10日
    浏览(43)
  • select多选回显问题 (取巧~)

    要实现的效果: 以上是一种简单的解决方法~ 也可以自己处理数据或者让后端直接改成想要的格式。

    2024年02月09日
    浏览(33)
  • zTree树的创建、多选、多选框信息回显附带zTree树官网地址

                                           

    2024年02月15日
    浏览(38)
  • vxe-table 表格多选框回显

    1.弹框表格结构   a-modal               v-if=\\\"visibleQuality\\\"               title=\\\"请选择需要提高的能力素质要求\\\"               :maskClosable=\\\"false\\\"               :visible=\\\"visibleQuality switchStatus\\\"               @ok=\\\"handleOkQuality\\\"               @cancel=\\\"handleCancelQuality\\\"            

    2024年02月06日
    浏览(39)
  • 关于ElementUI的CheckBox多选框数据回显

    我们经常需要进行多选框checkbox的数据回显  例如上图,需要回显已选的数据。 因为ElementUi已经对代码进行了封装,如下代码示例:  在 el-checkbox-group 的 v-model 数据需要和label标签值相同才能数据回显。 因为ElementUI已经封装好了,会自动匹配 el-checkbox-group 中 v-model 的数据和

    2024年02月11日
    浏览(47)
  • el-table(type=“selection“)多选框两种回显

    目录 一、前端数据回显(页面间数据展示) 1、图片帮助理解 2、描述: 3、代码 4、两个API,一个v-model 二、数据库数据回显  1、描述: 2、核心代码: 3、比较完整代码:(这是element ui官方文档上的) 4、改动过的,更加适应现实场景的代码:     几个注意点: 1、图片帮助理解

    2024年02月02日
    浏览(36)
  • element-UI表格中多选框回显默认选中

    1、通过@selection-change=\\\"handleSelectionChange\\\"获取勾选的数据 2、通过this.$refs.multipleTable.toggleRowSelection(row, true);将数据回显 注意:toggleRowSelection方法的row数据必须是从tableData中获取  

    2024年02月12日
    浏览(44)
  • el-table select 多选框如何实现选中数据回显

    现象描述: 将用户勾选的内容添加到表格,当页面还未关闭时,选项还是正常勾选,但是只要退出该页面,再进来就会发现勾选被取消了 需求描述: 已选择项默认勾选,且表格内容更改,勾选项也同步更改 效果如下:

    2024年02月14日
    浏览(44)
  • el-select 多选框使用 以及回显默认选中说明

    改动点 el-select 添加属性  multiple,  v-model=  绑定的必须是个数组,在data中定义好,  回显的时候,后台传递数组有值就能显示多个选中的。 后台 遇到问题建议多看element官网文章 ,下拉框单选、多选、输入检索都有案例 学习来源: el-select 多选框使用 以及回显默认选中

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包