1

我创建了一个自定义ListView,其中每一行都包含一个TextView和一个EditText。一切都运行良好,但我只是不知道应该在哪里设置,TextChangeListener以便EditText我可以设置/保存输入的值。这是我的代码:

行项目.java

public class RowItem {

    private String title;
    private String value;

    public RowItem(String title, String value) {
        this.title = title;
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

自定义列表.java

public class CustomList extends ArrayAdapter<RowItem> {

    Context context;
    List<RowItem> items;

    public CustomList(Context context, int resourceId,
            List<RowItem> items) {
        super(context, resourceId, items);
        this.context = context;
        this.items = items;
    }

    /*private view holder class*/
    private class ViewHolder {
        TextView txtTitle;
        EditText txtValue;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        RowItem rowItem = getItem(position);

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.row_item, null);
            holder = new ViewHolder();
            holder.txtTitle = (TextView) convertView.findViewById(R.id.textView1);
            holder.txtValue = (EditText) convertView.findViewById(R.id.editText1);
            convertView.setTag(holder);
        } else
            holder = (ViewHolder) convertView.getTag();

        holder.txtTitle.setText(rowItem.getTitle());
        holder.txtValue.setText(rowItem.getValue());

        return convertView;
    }
}

有什么建议吗?

4

1 回答 1

2

修改您的 viewHolder 以包含它指向的行的行号。

private class ViewHolder {
    TextView txtTitle;
    EditText txtValue;
    int rowNumber;
}

始终设置 rowNumber

holder.txtValue.setText(rowItem.getValue());
holder.rowNumber = position;

将您的自定义适配器添加为 editText 上的 onFocusListener 并获取由以下代码编辑的 rowNumber。

void onFocusChanged(View v, boolean hasFocus) {
    ViewHolder holder = (ViewHolder)v.getParentView().getTag();
    int rowNo = holder.rowNumber;
    //do rest of the stuff like modifying the array list.
}

但是,我确实认为应该有比这个更简单的解决方案。

于 2013-08-27T21:12:35.610 回答