listView中带下拉框和输入框如何获取值

一:布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".Activity5"
    android:padding="20dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="获取listView中下拉框和输入框的值"
        android:textSize="23sp"
        android:gravity="center"/>

    <HorizontalScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginTop="50dp"
        android:layout_marginBottom="100dp">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <TextView
                    android:layout_width="80dp"
                    android:layout_height="wrap_content"
                    android:text="编号"
                    android:gravity="center"
                    android:padding="3dp"
                    android:background="@drawable/bg_border_tab"/>
                <TextView
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:text="姓名"
                    android:gravity="center"
                    android:padding="3dp"
                    android:background="@drawable/bg_border_tab"/>
                <TextView
                    android:layout_width="60dp"
                    android:layout_height="wrap_content"
                    android:text="年龄"
                    android:gravity="center"
                    android:padding="3dp"
                    android:background="@drawable/bg_border_tab"/>
                <TextView
                    android:layout_width="60dp"
                    android:layout_height="wrap_content"
                    android:text="性别"
                    android:gravity="center"
                    android:padding="3dp"
                    android:background="@drawable/bg_border_tab"/>
                <TextView
                    android:layout_width="90dp"
                    android:layout_height="wrap_content"
                    android:text="是否回家"
                    android:gravity="center"
                    android:padding="3dp"
                    android:background="@drawable/bg_border_tab"/>
                <TextView
                    android:layout_width="150dp"
                    android:layout_height="wrap_content"
                    android:text="回家方式"
                    android:gravity="center"
                    android:padding="3dp"
                    android:background="@drawable/bg_border_tab"/>
            </LinearLayout>
            <ListView
                android:id="@+id/list"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </LinearLayout>
    </HorizontalScrollView>

    <Button
        android:id="@+id/btn_submit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="提交"
        android:layout_above="@+id/btn"/>

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="返回"
        android:layout_alignParentBottom="true"/>
</RelativeLayout>

二:自定义ListView适配器EditSpinnerAdapter

package com.example.test.tools;

import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import com.example.test.Activity5;
import com.example.test.R;
import com.example.test.entity.Dict;

import java.util.List;
import java.util.Map;

public class EditSpinnerAdapter extends BaseAdapter {
    private Context context;
    private List<Map<String, String>> list;
    private Map<String, List<Dict>> map;
    private LayoutInflater inflater;

    public EditSpinnerAdapter(Context context, List<Map<String, String>> list, Map<String, List<Dict>> map) {
        this.context = context;
        this.list = list;
        this.map = map;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.list, null);
            holder.go_home = convertView.findViewById(R.id.go_home);
            holder.way = convertView.findViewById(R.id.way);
            holder.number = convertView.findViewById(R.id.number);
            holder.name = convertView.findViewById(R.id.name);
            holder.age = convertView.findViewById(R.id.age);
            holder.gender = convertView.findViewById(R.id.gender);
            SpinnerArrayAdapter adapter = new SpinnerArrayAdapter(context, map.get("go_home"));
            holder.go_home.setAdapter(adapter);
            holder.go_home.setOnItemSelectedListener(new MyOnItemSelectListener(holder.go_home, holder.way));
            holder.way.addTextChangedListener(new MyTextChangListener(holder.way));
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.number.setText(list.get(position).get("number"));
        holder.name.setText(list.get(position).get("name"));
        holder.age.setText(list.get(position).get("age"));
        holder.gender.setText(list.get(position).get("gender"));
        holder.go_home.setTag(position);
        holder.way.setTag(position);
        return convertView;
    }

    class ViewHolder {
        Spinner go_home;
        EditText way;
        TextView number;
        TextView name;
        TextView age;
        TextView gender;
    }

    /**
     * 下拉框点击事件,点击之后对输入框进行相应控制
     */
    private class MyOnItemSelectListener implements AdapterView.OnItemSelectedListener {
        private Spinner spinner;
        private EditText editText;

        public MyOnItemSelectListener(Spinner spinner, EditText editText) {
            this.spinner = spinner;
            this.editText = editText;
        }

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String num = ((Dict)spinner.getSelectedItem()).getDictCode();
            if (num.equals("0")) {
                editText.setHint("必填项不能为空");
                editText.setEnabled(true);
                editText.setText("");
            } else {
                editText.setHint("默认为空");
                editText.setEnabled(false);
                editText.setText("");
            }
            int index = (int) spinner.getTag();
            ((Activity5)context).saveSpinner(index, num);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    }

    /**
     * 监听输入框内容变化,并将输入内容传出
     */
    private class MyTextChangListener implements TextWatcher {
        private EditText editText;

        public MyTextChangListener(EditText editText) {
            this.editText = editText;
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            int index = (int) editText.getTag();
            ((Activity5)context).saveEditText(index, s.toString());
        }
    }
}

自定义ListView适配器EditSpinnerAdapter的布局文件list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/number"
        android:layout_width="80dp"
        android:layout_height="match_parent"
        android:gravity="center"
        android:padding="3dp"
        android:textSize="15sp"
        android:background="@drawable/bg_border"/>
    <TextView
        android:id="@+id/name"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:gravity="center"
        android:padding="3dp"
        android:textSize="15sp"
        android:background="@drawable/bg_border"/>
    <TextView
        android:id="@+id/age"
        android:layout_width="60dp"
        android:layout_height="match_parent"
        android:gravity="center"
        android:padding="3dp"
        android:textSize="15sp"
        android:background="@drawable/bg_border"/>
    <TextView
        android:id="@+id/gender"
        android:layout_width="60dp"
        android:layout_height="match_parent"
        android:gravity="center"
        android:padding="3dp"
        android:textSize="15sp"
        android:background="@drawable/bg_border"/>
    <LinearLayout
        android:layout_width="90dp"
        android:layout_height="match_parent"
        android:background="@drawable/bg_border">
        <Spinner
            android:id="@+id/go_home"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </LinearLayout>
    <EditText
        android:id="@+id/way"
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:gravity="center"
        android:padding="3dp"
        android:textSize="15sp"
        android:background="@drawable/bg_border"/>
</LinearLayout>

三:自定义下拉框适配器SpinnerArrayAdapter

package com.example.test.tools;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.example.test.R;
import com.example.test.entity.Dict;

import java.util.List;

public class SpinnerArrayAdapter extends BaseAdapter {
    private Context context;
    private List<Dict> list;
    private LayoutInflater inflater;

    public SpinnerArrayAdapter(Context context, List<Dict> list) {
        this.context = context;
        this.list = list;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Text text = null;
        if (convertView == null) {
            text = new Text();
            convertView = inflater.inflate(R.layout.spinner, null);
            text.text_id = convertView.findViewById(R.id.text_id);
            text.text_name = convertView.findViewById(R.id.text_name);
            convertView.setTag(text);
        } else {
            text = (Text) convertView.getTag();
        }
        text.text_id.setText(list.get(position).getDictCode());
        text.text_name.setText(list.get(position).getDictName());
        return convertView;
    }

    class Text {
        TextView text_id;
        TextView text_name;
    }
}

自定义下拉框适配器SpinnerArrayAdapter的布局文件spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="3dp"
        android:layout_marginLeft="10dp"/>

    <TextView
        android:id="@+id/text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"/>

</LinearLayout>

四:创建实体类Dict保存字典用于下拉框数据源

package com.example.test.entity;

public class Dict {
    public String dictName;
    public String dictCode;

    public String getDictName() {
        return dictName;
    }

    public void setDictName(String dictName) {
        this.dictName = dictName;
    }

    public String getDictCode() {
        return dictCode;
    }

    public void setDictCode(String dictCode) {
        this.dictCode = dictCode;
    }
}

五:调用

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.example.test.entity.Dict;
import com.example.test.tools.EditSpinnerAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Activity5 extends AppCompatActivity {
    List<Map<String, String>> submit = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_5);

        initView();
    }

    private void initView() {
        Button btn = findViewById(R.id.btn);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        /**
         * 模拟list数据
         */
        Map map1 = new HashMap();
        map1.put("name", "张三");
        map1.put("age", "18");
        map1.put("gender", "男");
        map1.put("number", "001");
        submit.add(map1);
        Map map2 = new HashMap();
        map2.put("name", "翠花");
        map2.put("age", "16");
        map2.put("gender", "女");
        map2.put("number", "002");
        submit.add(map2);
        Map map3 = new HashMap();
        map3.put("name", "李四");
        map3.put("age", "20");
        map3.put("gender", "男");
        map3.put("number", "003");
        submit.add(map3);
        Map map4 = new HashMap();
        map4.put("name", "熊大");
        map4.put("age", "32");
        map4.put("gender", "男");
        map4.put("number", "004");
        submit.add(map4);

        /**
         * 模拟字典
         */
        List<Map<String, String>> dicts = new ArrayList<>();
        Map<String, String> map5 = new HashMap<>();
        map5.put("dict_code", "0");
        map5.put("dict_name", "是");
        map5.put("tp_code", "go_home");
        map5.put("cancel_status", "0");
        dicts.add(map5);
        Map<String, String> map6 = new HashMap<>();
        map6.put("dict_code", "1");
        map6.put("dict_name", "否");
        map6.put("tp_code", "go_home");
        map6.put("cancel_status", "0");
        dicts.add(map6);

        /**
         * 获取字典并保存
         */
        Map<String, List<Dict>> map_enable = new HashMap<>();
        for (Map<String, String> m : dicts) {
            List<Dict> lists = new ArrayList<>();
            Dict dict = new Dict();
            if (m.get("cancel_status").equals("0")) {
                dict.setDictCode(m.get("dict_code"));
                dict.setDictName(m.get("dict_name"));
                if (map_enable.containsKey(m.get("tp_code"))) {
                    lists = map_enable.get(m.get("tp_code"));
                    lists.add(dict);
                } else {
                    lists.add(dict);
                }
                map_enable.put(m.get("tp_code"), lists);
            }
        }

        ListView listView = findViewById(R.id.list);
        EditSpinnerAdapter adapter = new EditSpinnerAdapter(Activity5.this, submit, map_enable);
        listView.setAdapter(adapter);

        Button btn_submit = findViewById(R.id.btn_submit);
        btn_submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(Activity5.this, submit.toString(), Toast.LENGTH_LONG).show();
            }
        });
    }

    /**
     * 获取下标值及下拉框的code
     * @param i list下标值
     * @param str 下拉框的code
     */
    public void saveSpinner(int i, String str) {
        String code = str;
        submit.get(i).put("是否回家", code);
    }

    /**
     * 获取下标值及输入框的内容
     * @param i list下标值
     * @param str 输入框内容
     */
    public void saveEditText(int i, String str) {
        String way = str;
        submit.get(i).put("回家方式", way);
    }
}

六:运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qxnedy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值