安卓Android控件ListView获取item中EditText值

来源:互联网 发布:泰格软件安装 编辑:程序博客网 时间:2024/06/06 12:36

转载地址:

http://www.cnblogs.com/exmyth/p/3799260.html


安卓Android控件ListView获取item中EditText值

 可以明确,现在没有直接方法可以获得ListView中每一行EditText的值.

    解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值.

    大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数据.那么在生成EditText的时候要监控其值的变化.存储下来.

    代码:

复制代码
package com.exmyth.android;public class ListEditorAdapter extends BaseAdapter {    private LayoutInflater mInflater;    private List<Map<String, Object>> mData;// 存储的EditText值    public Map<String, String> editorValue = new HashMap<String, String>();//    public ListEditorAdapter(Context context, List<Map<String, Object>> data) {        mData = data;        mInflater = LayoutInflater.from(context);        init();    }    // 初始化    private void init() {        editorValue.clear();    }    @Override    public int getCount() {        return mData.size();    }    @Override    public Object getItem(int position) {        return null;    }    @Override    public long getItemId(int position) {        return 0;    }    private Integer index = -1;    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        // convertView为null的时候初始化convertView。        if (convertView == null) {            holder = new ViewHolder();            convertView = mInflater.inflate(R.layout.listview_item, null);            holder.name = (TextView) convertView                    .findViewById(R.id.list_item_name);            holder.title = (TextView) convertView                    .findViewById(R.id.list_item_title);            holder.value = (EditText) convertView                    .findViewById(R.id.list_item_inputvalue);            holder.value.setTag(position);            holder.userkey = (TextView) convertView.findViewById(R.id.user_key);            holder.value.setOnTouchListener(new OnTouchListener() {                @Override                public boolean onTouch(View v, MotionEvent event) {                    if (event.getAction() == MotionEvent.ACTION_UP) {                        index = (Integer) v.getTag();                    }                    return false;                }            });            class MyTextWatcher implements TextWatcher {                public MyTextWatcher(ViewHolder holder) {                    mHolder = holder;                }                private ViewHolder mHolder;                @Override                public void onTextChanged(CharSequence s, int start,                        int before, int count) {                }                @Override                public void beforeTextChanged(CharSequence s, int start,                        int count, int after) {                }                @Override                public void afterTextChanged(Editable s) {                    if (s != null && !"".equals(s.toString())) {                        int position = (Integer) mHolder.value.getTag();                        mData.get(position).put("list_item_inputvalue",                                s.toString());// 当EditText数据发生改变的时候存到data变量中                    }                }            }            holder.value.addTextChangedListener(new MyTextWatcher(holder));            convertView.setTag(holder);        } else {            holder = (ViewHolder) convertView.getTag();            holder.value.setTag(position);        }        Object value = mData.get(position).get("list_item_name");        if (value != null) {            holder.name.setText((String) value);        }        value = mData.get(position).get("list_item_title");        if (value != null) {            holder.title.setText(value.toString());        }        value = mData.get(position).get("user_key");        if (value != null) {            holder.userkey.setText(value.toString());        } else {            holder.userkey.setText("-1");        }        value = mData.get(position).get("list_item_inputvalue");        if (value != null && !"".equals(value)) {            holder.value.setText(value.toString());        } else {            String key = mData.get(position).get("user_key").toString();            String inputValue = editorValue.get(key);            holder.value.setText(inputValue);        }        holder.value.clearFocus();        if (index != -1 && index == position) {            holder.value.requestFocus();        }        return convertView;    }    public final class ViewHolder {        public TextView name;        public TextView title;        public EditText value;// ListView中的输入        public TextView userkey;// 用来定义的标志性主键,可不用关心    }}
复制代码

 

使用方法:

private List<Map<String, Object>> mCheckItemList = new ArrayList<Map<String, Object>>();

mAdapter = new ListEditorAdapter(this, mCheckItemList);

m_lvListView.setAdapter(mAdapter);

直接改变mCheckItemList中的数据,然后调用mAdapter.notifyDataSetChanged();就可以更新ListView的数据

当然,直接从mCheckItemList也可以获得用户在EditText中输入的数据.比较方便

 

 

 

其他:

ListView list= (ListView)findViewById(R.id.list);//获得listview

for (int i = 0; i < list.getChildCount(); i++) {
     LinearLayout layout = (LinearLayout)list.getChildAt(i);// 获得子item的layout
     EditText et = (EditText) layout.findViewById(R.id.et);// 从layout中获得控件,根据其id
// EditText et = (EditText) layout.getChildAt(1)//或者根据位置,在这我假设TextView在前,EditText在后
     
     System.out.println("the text of "+i+"'s EditText:----------->"+et.getText());
}


注意:

当我测试的时候删除EditText里面已有的数据时,发现在按回车键时,却又有数据了,原因在这里

 @Override                public void afterTextChanged(Editable s) {                    if (s != null && !"".equals(s.toString())) {                        int position = (Integer) mHolder.value.getTag();                        mData.get(position).put("list_item_inputvalue",                                s.toString());// 当EditText数据发生改变的时候存到data变量中                    }                }

红色部分是在不为空的情况下显示的,当我删除掉这一部分时,就没有数据了。

在 寻找解决方法的时候,觉得这篇博客写的也不错:

http://blog.csdn.net/qq_28268507/article/details/53666576


最后附上自己写的demo,折腾了一个上午,终于折腾出来了,菜鸟一枚

http://download.csdn.net/detail/juhua2012/9767298



0 0
原创粉丝点击