【问题标题】:Validation on EditText from outside BaseAdapter class从 BaseAdapter 类外部验证 EditText
【发布时间】:2016-02-08 13:58:20
【问题描述】:

我有一个列表框,它在列表框的每一行中都包含 EditBox。在按钮 Save 我必须检查是否所有 EditText 对象都填充了数据。

ListView 的适配器是这样构造的:

public class LvAdapter extends BaseAdapter {

    Activity activity;
    Context context;
    ArrayList<PList> arrayPList;

    public LvAdapter(Context mContext, ArrayList<PList> array) {
         context = mContext;
         activity = (Activity) context;
         arrayPreStart = array;
    }       

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

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

    @Override
    public long getItemId(int arg0) {
        return arrayPList.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup arg2) {
        LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final ViewHolder viewHolder = new ViewHolder();
        convertView = inflater.inflate(R.layout.row_prestartcheck_list, null);
        viewHolder.edComment = (EditText) convertView.findViewById(R.id.edComment);
        viewHolder.edComment.setTag(position);
        return convertView;
    }
   }

public class ViewHolder {
        EditText edComment;
}

在主类中定义一个自定义方法来检查任何空的 EditText : MainClass.java:

ListView lvQuestion;
ArrayList<PList> arrayPList = new ArrayList<>();
PList pList = new PList();
btnEnter.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            boolean isAnyEmpty=true;
            for (int i=0; i<arrayPList.size(); i++) {
                 View view =  lvQuestion.getAdapter().getView(i, null, null);
                 EditText quantity = (EditText) view.findViewById(R.id.edComment);
                quantity.requestFocus(); 
                quantity.setError("asdasda");
                isAnyEmpty=false;
                break;
            }
        });
}

我已经使用 setText 测试了对象并且对我来说工作正常,但只有 requestfocus 和 setError 不起作用,请帮助解决这个问题或给我替代解决方案

【问题讨论】:

  • 只需检查您的 getview() 中的 edittext;按位置
  • 但是我有一个不同视图的按钮,这就是为什么我使用这个函数进行空检查,我将使用这个函数来对付按钮点击监听器。

标签: android listview baseadapter


【解决方案1】:

你需要设置一个条件来检查EditText是否为空。

像这样改变你的方法

public boolean isEmpty(){
    boolean isAnyEmpty=false;
    for (int i=0;i<quantityCheckList.size();i++){
        View view =  lvQuestion.getAdapter().getView(i, null, null);
        EditText quantity = (EditText) view.findViewById(R.id.txtQuantity);
        if(quantity.getText().toString().isEmpty())
        {
            quantity.requestFocus(); 
            quantity.setError("asdasda");
            isAnyEmpty=true;
            break;
        }
   }
   return isAnyEmpty;
}

【讨论】:

  • 代码运行良好兄弟,唯一的问题是我面临 requestFocus();如果我使用 quantity.setText("asdasda"); 则不起作用代码适用于特定的 EditText
  • 没有 if 条件 requestFocus 会为每个空白的 EditText 调用。
猜你喜欢
  • 2022-06-29
  • 2013-08-05
  • 2012-12-05
  • 2012-07-11
  • 2015-05-13
  • 2016-10-22
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
相关资源
最近更新 更多