验证 ListView 适配器中的 EditText

Posted

技术标签:

【中文标题】验证 ListView 适配器中的 EditText【英文标题】:Validation on EditText in ListView Adapter 【发布时间】:2019-02-01 21:45:35 【问题描述】:

我有一个 ListView 适配器,编码如下:

@Override
public View getView(int i, View view, ViewGroup viewGroup)
    if(layoutInflater == null)
        layoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    

    if(view == null)
        view = layoutInflater.inflate(R.layout.list_pickingscan, null);
    

    final TextView tvMaterialCode = (TextView) view.findViewById(R.id.list_picking_scan_materialcode_tv);
    EditText etSerialNumber = (EditText) view.findViewById(R.id.list_picking_scan_serialnumber_tv);

    final PickingDetails pickingDetails = pickingDetailsList.get(i);
    tvMaterialCode.setText(pickingDetails.getMaterialCode().toString());
    etSerialNumber.setText(pickingDetails.getSerialNumber().toString());
    etSerialNumber.setMaxLines(1);
    return view;


视图应该如下:

Material Code    Serial Number
Material A       ______________
Material B       ______________

每次用户在提交按钮之前输入值时,我都想对 EditText 序列号进行验证。如何制作?

【问题讨论】:

【参考方案1】:

您可以使用 TextWatcher

添加验证
 private class GenericTextWatcher implements TextWatcher 

    private View view;

    private GenericTextWatcher(View view) 
        this.view = view;
    

    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) 
    

    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) 
    

    public void afterTextChanged(Editable editable) 
        switch (view.getId())
            case **First View Id:**
            //validation for first edit text
            break;
            case **second view id :**
            //validation for second edit text
             break
        

    


m_InputMobile.addTextChangedListener(new GenericTextWatcher(m_InputMobile));
secondView.addTextChangedListener(new GenericTextWatcher(secondView));

【讨论】:

我如何知道根据您的回答选择了哪个位置的editText或editText? 好的,让我更新多个editTexts的答案 但我的问题还是一样,你怎么知道在哪个位置选择了哪个编辑文本? 假设您从 1 个位置选择editText,然后您选择了2 个位置,您怎么知道根据位置选择了哪个editText 是的。如何知道 EditText 的位置? 在为每个编辑文本创建对象时,将视图的引用传递给 GenericTextWatcher。因此,您可以获得执行 GenericTextWatcher 对象的视图的 ID,如下所示 switch (view.getId()) case *First View Id: / /验证首次编辑文本中断; case second view id : //验证第二次编辑文本中断 *

以上是关于验证 ListView 适配器中的 EditText的主要内容,如果未能解决你的问题,请参考以下文章

将ListView中的元素与一个适配器中的元素与另一个ListView和适配器中的值匹配

Android ListView 和带有 ViewHolder 的自定义适配器

android中的listview计数与适配器计数

带有arraylist的listview,android中的简单适配器

使用自定义适配器更改ListView中特定行中的ImageView

ListView自定义适配器,包括库中的图像