Android 解决Listview条目里面有Edittext数据错乱问题
2016-05-21 19:47
645 查看
当Listview的条目里面有EditText,如果数据很多的情况下,编辑数据后上下滑动,发现数据会错乱了。。。。
Activity里面就一个更新数据的方法:
/**
* 更新数据
* @param position
* @param text
*/
public void upDateData(int position,String text){
mData.get(position).setText(text);
}
JavaBean:
public class MyBean {
private int type; // 数据类型:0、TextView 1、EditText
private String text;
public MyBean(int type, String text) {
this.type = type;
this.text = text;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return "MyBean{" +
"type=" + type +
", text='" + text + '\'' +
'}';
}
}
Adapter主要的处理都在这里:
需要两个判断:一是判断所要显示的类型 二是view是不是空的
在编辑数据的时候,记得要刷新activity里面的数据
package com.zs.listwithedit;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* **********************************
* User: zs
* Date: 2016年 05月 21日
* Time: 下午7:11
*
* @QQ : 1234567890
* **********************************
*/
public class MyAdapter extends BaseAdapter {
private Context mContext;
private List<MyBean> mData;
public MyAdapter(Context mContext,ArrayList<MyBean> data) {
this.mContext = mContext;
this.mData = data;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int i) {
return mData.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public int getItemViewType(int position) {
return mData.get(position).getType();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
TextHolder textHolder = null;
EditHolder editHolder = null;
String text = mData.get(i).getText();
// TODO 判断数据是TextView 还是 EdiText
if (getItemViewType(i) == 0){ // TextView
if (view == null){
textHolder = new TextHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_text_layout,null);
textHolder.textView = (TextView) view.findViewById(R.id.item_tv);
view.setTag(textHolder);
}else{
Object object = view.getTag();
if (object.getClass().equals(TextHolder.class) == false){
textHolder = new TextHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_text_layout,null);
textHolder.textView = (TextView) view.findViewById(R.id.item_tv);
view.setTag(textHolder);
}else{
textHolder = (TextHolder)object;
}
}
textHolder.textView.setText(text);
}else if (getItemViewType(i) == 1){ // EditText
if (view == null){
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_edit_layout,null);
editHolder = new EditHolder(view);
editHolder.editText = (EditText) view.findViewById(R.id.item_et);
view.setTag(editHolder);
}else{
Object object = view.getTag();
if (object.getClass().equals(EditHolder.class) == false){
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_edit_layout,null);
editHolder = new EditHolder(view);
editHolder.editText = (EditText) view.findViewById(R.id.item_et);
view.setTag(editHolder);
}else{
editHolder = (EditHolder) object;
}
}
editHolder.position = i;
editHolder.editText.setText(text);
}
return view;
}
// 数据类型 1 TextView
class TextHolder{
private TextView textView;
}
// 数据类型 2 EditText
class EditHolder{
private EditText editText;
int position;
public EditHolder(View v)
{
editText = (EditText)v.findViewById(R.id.item_et);
// TODO 设置EditText的监听
editText.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void afterTextChanged(Editable s) {
// TODO 修改数据
mData.get(position).setText(s.toString());
((MyActivity)mContext).upDateData(position,s.toString());
}
});
}
}
}
源码地址:http://download.csdn.net/detail/qq55214/9527283
Activity里面就一个更新数据的方法:
/**
* 更新数据
* @param position
* @param text
*/
public void upDateData(int position,String text){
mData.get(position).setText(text);
}
JavaBean:
public class MyBean {
private int type; // 数据类型:0、TextView 1、EditText
private String text;
public MyBean(int type, String text) {
this.type = type;
this.text = text;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return "MyBean{" +
"type=" + type +
", text='" + text + '\'' +
'}';
}
}
Adapter主要的处理都在这里:
需要两个判断:一是判断所要显示的类型 二是view是不是空的
在编辑数据的时候,记得要刷新activity里面的数据
package com.zs.listwithedit;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* **********************************
* User: zs
* Date: 2016年 05月 21日
* Time: 下午7:11
*
* @QQ : 1234567890
* **********************************
*/
public class MyAdapter extends BaseAdapter {
private Context mContext;
private List<MyBean> mData;
public MyAdapter(Context mContext,ArrayList<MyBean> data) {
this.mContext = mContext;
this.mData = data;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int i) {
return mData.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public int getItemViewType(int position) {
return mData.get(position).getType();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
TextHolder textHolder = null;
EditHolder editHolder = null;
String text = mData.get(i).getText();
// TODO 判断数据是TextView 还是 EdiText
if (getItemViewType(i) == 0){ // TextView
if (view == null){
textHolder = new TextHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_text_layout,null);
textHolder.textView = (TextView) view.findViewById(R.id.item_tv);
view.setTag(textHolder);
}else{
Object object = view.getTag();
if (object.getClass().equals(TextHolder.class) == false){
textHolder = new TextHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_text_layout,null);
textHolder.textView = (TextView) view.findViewById(R.id.item_tv);
view.setTag(textHolder);
}else{
textHolder = (TextHolder)object;
}
}
textHolder.textView.setText(text);
}else if (getItemViewType(i) == 1){ // EditText
if (view == null){
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_edit_layout,null);
editHolder = new EditHolder(view);
editHolder.editText = (EditText) view.findViewById(R.id.item_et);
view.setTag(editHolder);
}else{
Object object = view.getTag();
if (object.getClass().equals(EditHolder.class) == false){
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_edit_layout,null);
editHolder = new EditHolder(view);
editHolder.editText = (EditText) view.findViewById(R.id.item_et);
view.setTag(editHolder);
}else{
editHolder = (EditHolder) object;
}
}
editHolder.position = i;
editHolder.editText.setText(text);
}
return view;
}
// 数据类型 1 TextView
class TextHolder{
private TextView textView;
}
// 数据类型 2 EditText
class EditHolder{
private EditText editText;
int position;
public EditHolder(View v)
{
editText = (EditText)v.findViewById(R.id.item_et);
// TODO 设置EditText的监听
editText.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void afterTextChanged(Editable s) {
// TODO 修改数据
mData.get(position).setText(s.toString());
((MyActivity)mContext).upDateData(position,s.toString());
}
});
}
}
}
源码地址:http://download.csdn.net/detail/qq55214/9527283
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- android上改变listView的选中颜色
- Delphi7中Listview的常用功能汇总
- Delphi控件ListView的属性及使用方法详解
- android中ListView数据刷新时的同步方法
- Android提高之ListView实现自适应表格的方法
- Android中实现水平滑动(横向滑动)ListView示例
- Android ListView分页功能实现方法
- C#实现ListView选中项向上或向下移动的方法
- C#下listview如何插入图片
- Listview加载的性能优化是如何实现的
- C#实现listview Group收缩扩展的方法
- C# listview添加combobox到单元格的实现代码
- ListView 百分比进度条(delphi版)
- Android listview多视图嵌套多视图
- ListView Adapter优化 实例
- Android用ListView显示SDCard文件列表的小例子
- Adapter实现ListView带多选框等状态的自定义控件的注意事项
- asp.net ListView 数据绑定
- Android之ScrollView嵌套ListView和GridView冲突的解决方法