在listview中java代码动态生成控件并设置监听获取值

listview中每一行动态生成输入框,下拉选择框等控件,
并设置监听,例如输入框设置每次输入完后都会保存输入值,下拉框每次选择后保存值,最后再汇总。我呢就是把值存在那个attrRespDtoList中的一个字段里,这样在再次渲染界面时,有值的情况下再默认显示这个值。
有三点值得注意
一、下拉选择框异步加载数据,Spinner从服务器上解析数据,简单点说就是Spinner可见不可选,有两种解决方案,一则提前准备好数据,二则事先添加一个默认数据

 Adapter = new ProductInfoAdapter(ProductInfoSet.this,R.layout.product_info_set_,attrRespDtoList,attrRespDtoListCopy);
        productlistView.setAdapter(Adapter);

二、关于监听多个输入框,比如我这里监听输入框输入后的事件,是监听软键盘的隐藏事件,但是多个输入框的情况下,我们可能会保存每个输入框后的值,但是只会去监听一个输入框输入后的其他动作事件,可以写个全局变量,该特殊输入框的值赋给该全局变量,如果全局变量发生改变,那么触发该特殊的其他动作事件

因为如果在所有输入动作之后再想去获取值的话,可以明确,现在没有直接方法可以获得ListView中每一行的值.或许可以for循环去判断输入类型然后获取输入控件的值,但是这样很麻烦哦,我没这样做也不知道能不能做出来。
下面是我的业务实现逻辑代码:(有些地方还需要改动,改完再更新下)

 @Override
    public View getView(final int position , View convertView , ViewGroup parent) {
        final ProduceAttrRespDto attrRespDtoListCopy = getItem(position);
         final ProduceAttrRespDto productInfo = getItem(position);
        ProductInfoAdapter.ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.product_info_add, null);
            viewHolder = new ProductInfoAdapter.ViewHolder();
            viewHolder.code =(TextView) convertView.findViewById(R.id.name);
            viewHolder.linearLayout =(LinearLayout) convertView.findViewById(R.id.inputType);
            convertView.setTag(viewHolder);
        }else {
            viewHolder = (ProductInfoAdapter.ViewHolder) convertView.getTag();
        }
        viewHolder.code.setText(productInfo.getAttrName());
        LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
        if (productInfo.getInputType().equals("input")) {
             //设置textview垂直居中
            tvParams.gravity = Gravity.CENTER;
             final EditText editText = new EditText(getContext());
            editText.setLayoutParams(tvParams);

            editText.setHint("请输入"+productInfo.getAttrName());//显示名字
            editText.setInputType(InputType.TYPE_CLASS_NUMBER);//输入类型
            editText.setSingleLine(true);             //下划线
            editText.setImeOptions(IME_ACTION_DONE);  //设置键盘完成
            editText.setTextSize(16);

            editText.addTextChangedListener(new TextWatcher() {
                @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) {
                    //输入之后你想做什么                num[cout]=Integer.parseInt(editText.getText().toString());
                    String str = editText.getText().toString();
                    attrRespDtoListCopy.setCheckRule(str);
                }
            });

            if (productInfo.getCheckRule()!=null){
                editText.setText(productInfo.getCheckRule());
            }
            viewHolder.linearLayout.addView(editText);
            if (productInfo.getAttrName().equals("工单号"))//增加查询按钮 设置监听 还要调取输入框的值
            {
                Button button =new Button(getContext());
                button.setTextSize(12);
                button.setText("查询工单");
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        String string;
                    }
                });
                viewHolder.linearLayout.addView(button);
            }
        }else if (productInfo.getInputType().equals("selector")){
            //伪造数据
            List<String> data_list;
        data_list = new ArrayList<String>();
        data_list.add("1*6");
        data_list.add("1*9");
        data_list.add("1*12");
        data_list.add("1*24");
        data_list.add("1*24");
        data_list.add("1*24");

         final Spinner format = new Spinner(getContext());
        ArrayAdapter<String> arr_adapter;
        //适配器
        arr_adapter= new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, data_list);
        //设置样式
        arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //加载适配器
            format.setAdapter(arr_adapter);
            format.setLayoutParams(tvParams);
            if (productInfo.getCheckRule()!=null){
                format.setSelection(2,true); //设置下拉选择的默认值
            }
            format.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){

                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    String form = (String) format.getSelectedItem();
                    attrRespDtoListCopy.setCheckRule(form);
                }

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

                }
            });
            viewHolder.linearLayout.addView(format);

        }
        return convertView;
    }

    private class ViewHolder {
        private TextView code;
        private LinearLayout linearLayout;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值