ListView中EditText焦点问题
来源:互联网 发布:js new string a 编辑:程序博客网 时间:2024/05/06 10:53
ListView中的EditText会强制获取焦点,因为ListView中的item是复用的,在监听EditText的值变化时会产生混乱。
解决方法:
public class ListAdapter extends BaseAdapter { private Context context; private ArrayList<Data> arrayList; private ViewHolder viewHolder; private HashMap<Integer, String> map = new HashMap<>(); private int index = -1; public ListAdapter(Context context, ArrayList<Data> arrayList) { this.context = context; this.arrayList = arrayList; map.clear(); } @Override public int getCount() { return arrayList.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { viewHolder = new ViewHolder(); convertView = View.inflate(context, R.layout.list_item, null); viewHolder.textView = (TextView) convertView.findViewById(R.id.tv_item); viewHolder.editText = (EditText) convertView.findViewById(R.id.edit_item); viewHolder.editText.setTag(position); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); viewHolder.editText.setTag(position); } viewHolder.textView.setText(arrayList.get(position).getItem()); int tag = (int) viewHolder.editText.getTag(); if (map.get(tag) != null && !map.get(tag).equals("")) { viewHolder.editText.setText(map.get(tag)); } else { viewHolder.editText.setText("" + arrayList.get(position).getEditValue()); } viewHolder.editText.addTextChangedListener(new MyTextWatcher(viewHolder)); viewHolder.editText.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { index = (int) v.getTag(); } return false; } }); viewHolder.editText.clearFocus(); if (index != -1 && index == position) { viewHolder.editText.requestFocus(); } return convertView; } private class ViewHolder { TextView textView; EditText editText; } class MyTextWatcher implements TextWatcher { private ViewHolder holder; public MyTextWatcher(ViewHolder holder) { this.holder = holder; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { int pos = (int) holder.editText.getTag(); map.put(pos, s.toString()); } }}
源码
0 0
- ListView中EditText焦点问题
- ListView中EditText焦点问题
- ListView中EditText焦点问题
- listview中EditText,焦点问题
- 【Android】ListView中EditText焦点问题
- 【Android】ListView中EditText焦点问题
- 【Android】ListView中EditText焦点问题
- ListView中Edittext焦点获取问题
- ListView中Item有EditText,焦点问题
- 【Android】ListView中EditText焦点问题
- ListView+EditText 焦点问题
- listview和edittext焦点问题
- ListView中EditText焦点获取
- Android—在listview中edittext获取焦点的问题
- ListView中含有EditText时候--要命的焦点问题迎刃而解
- android中listview包含edittext时,获取焦点问题
- 解决ListView中添加edittext的焦点问题。
- ListView中含有EditText抢占焦点问题终极解决方案
- Qt udp
- 在WebView上显示HTML内容
- Myeclipse错误:Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project
- 黑马程序员——Foundation框架——NSDictionary常用方法
- 安卓杂碎(手势操作控件)
- ListView中EditText焦点问题
- 通达OA2015 视频教程发布啦
- VisualStdio2013使用自带的SQL Server
- 在NodeJS中利用bookshelf.js进行事务(transaction)管理
- 关于Eclipse打包签名失效的问题
- 【javascript】javascript闭包经典代码
- Git 常用命令速查表(三)
- 清华大学出版社计算机图书出版,请联系我
- online_judge_1022