【问题标题】:Get ID of EditText in Expandable ListView获取Expandable ListView中EditText的ID
【发布时间】:2017-11-28 03:04:13
【问题描述】:

我使用的是可扩展的 ListView,每个子项中都有一个 EditText。 list_item.xml

<TextView
            android:id="@+id/lblListItem"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="TextView"
            android:textColor="#000000"
            android:textSize="17dp" />

        <EditText
            android:id="@+id/marks"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Obtained"
            android:inputType="number"
            android:maxLines="1"
            tools:layout_editor_absoluteX="142dp"
            tools:layout_editor_absoluteY="60dp" />

mainActivity上有一个按钮,当点击按钮时,我要获取User输入的每个Child的EditText的Text, 我试过了:

@Override
    public View getChildView(int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {

        final String childText = (String) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_item, null);
        }

        TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListItem);

        edt=(EditText)convertView.findViewById(R.id.marks);
        String abc=edt.getText().toString();


        Toast.makeText(convertView.getContext(),"This: "+ abc,Toast.LENGTH_SHORT).show();
        txtListChild.setText(childText);
        return convertView;
    }

但是,只有在扩展组时才有效,(Toast 向我显示在 EditText 中很容易出现的文本)当用户点击按钮时无效。

那么,如何在 Button Click 中调用 getChildView 方法? 我不知道在 OnClick() 中调用时要传递什么参数。 或

也许hack会起作用:当按钮被点击时,展开的组被折叠和展开,所以它会做我想要的?也许

【问题讨论】:

  • 我想获取所有子项的文本。 (可能在一个循环中)但是 getView() 没有循环,它工作得很好(否则它只在扩展组时工作)
  • 嗯,它必须只是一个按钮,正如你所说,这不是一个好方法,我认为,原因是:某些 EditTexts 可能为空?也许。然后我可以限制用户,按钮只有在所有字段都填满时才会起作用。所以,请告诉我,如何在 One ButtonClick 上保存引用并传递所有值。
  • 获取文本的顺序应与显示的一致。我的意思是,就像上面代码中显示的 Toast 一样。
  • 用户在一个会话期间只能进入一个组。没有孩子的 EditTexts 会大于 20。所以,我认为,这不是内存管理问题?

标签: android expandablelistview get-childitem


【解决方案1】:

您必须手动设置每个 EditText 的 ID。这可以在getChildView() 中完成。 虽然它不会帮助您输入并从孩子那里获取价值。 仅用于设置和获取ID

@Override
   public View getChildView(int groupPosition, final int childPosition,
                           boolean isLastChild, View convertView, ViewGroup parent) {

     final String childText = (String) getChild(groupPosition, childPosition);

     if (convertView == null) {
              LayoutInflater infalInflater = (LayoutInflater) this._context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              convertView = infalInflater.inflate(R.layout.list_item, null);
            }

     TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListItem);

     if(childPosition==0)//Original Id will be get only when First Child is being populated
{
          edt=(EditText)convertView.findViewById(R.id.marks);
    }
    edt.setId(childPosition); //here the ID will be same as childPosition i.e. 0,1,2...
    //Now You can get the ID by getID(id); //id can be 0,1,2...


    Toast.makeText(convertView.getContext(),"This: "+ abc,Toast.LENGTH_SHORT).show();
    txtListChild.setText(childText);
    return convertView;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2016-08-11
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多