【问题标题】:Get EditText in a listview outside of Adapter在适配器外部的列表视图中获取 EditText
【发布时间】:2014-12-16 15:58:22
【问题描述】:

我有一个列表视图,每行都有一个 EditText。 每个 EditText 都有他的验证,因此,当我单击 MenuItem“完成”时,我想对每个 EditText 进行验证并显示错误(如果有)。

我知道如何在我的适配器内访问我的 EditText,但在我的适配器内,我无法访问 MenuItem。 在我的适配器之外,我可以访问我的 MenuItem OnClick,但我无法再获取我的 edittext 值...

有什么办法???

【问题讨论】:

  • 当用户单击“完成”菜单时,您可以将适配器中的字段(如needValidation)设置为true。然后在您的适配器上调用notifyDataSetChanged()。因此,您将可以再次访问您的视图。验证完成后,再次将needValidation 设置为false

标签: android listview android-listview


【解决方案1】:

您可以遍历您的 listView 并执行以下操作:

View v = myList.getAdapter().getView(i, null, null);
EditText et = (EditText) v.findViewById(nameOfTheView);

检查this answer

【讨论】:

  • 通过将null 用于getView(int, View, ViewGroup) 方法的convertViewparent 参数,您会失去回收策略,并可能最终导致当前视图的LayoutParam 错误。
  • 我可以用它访问这些值,但我不能用 setErrors 显示错误。你知道如何修改适配器内部的视图吗?
【解决方案2】:

我解决了使用:ListView item set error Android

解决方案是在适配器中包含错误的 ArrayList。

Tx 为您提供帮助!

【讨论】:

    【解决方案3】:

    您可以做的一件事是设置一个类来保存变量:

    public class MyVarHolder {
        public EditText myText;
    }
    

    然后你在你的 getView 方法中使用它:

    mHolder.myText = (EditText) root.findViewById(R.id.my_edit_text);
    convertView.setTag(mHolder);
    

    最后一步是让持有者进入列表的 onClickListener:

    onItemClickListener(AdapterView<?> adapterView, View view, int position, long id) {
        MyVarHolder tag = (MyVarHolder)view.getTag();
    
       String editText = tag.myText.getText().toString();
    
       ...Do whatever you want...
    
    }
    

    【讨论】:

    • 这是我的适配器内部,我需要在外部访问它,在活动中
    • onItemClickListener 将在您的ActivityFragment 之外
    • 我需要通过 menuItem 进行验证,而不是 onItemClickListener,否则我可以在适配器中进行验证
    • MenuItem 是什么意思?
    • ActionBar 中的一个按钮
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2015-11-22
    • 1970-01-01
    相关资源
    最近更新 更多