Android控件ListView获取item中EditText值
(2023-07-30 16:37:09)
转:https://blog.csdn.net/u011275280/article/details/52471034
可以明确,现在没有直接方法可以获得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
-
public Map editorValue = new HashMap();//
-
-
public ListEditorAdapter(Context context, List
-
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
喜欢
0
赠金笔
加载中,请稍候......