您的位置:首页 > 其它

ListView中EditText的数据加载错乱的问题

2013-08-10 14:45 267 查看
我在ListView中用BaseAdapter的getView()方法加载适配器,每个Item里有一个TextView和一个EditText,当我在第一个EditText里面输入数据,比如1234时,同时会在第八个EditText中也出现1234,同样的,如果我在第二个EditText中输入1234,那么在第九个EditText中就会出现1234,以此类推,不知道是怎么回事,下面有解决方法和原因

ListView 为了避免浪费内存 只是用了 一屏幕的 ListItem

所以每次 getView 的 时候会 使用 使用这一屏幕中的 其中一个 item

所以在adapter 的getView方法中 必须每次重新设置数据
像textView CheckBox 等变化 的 状态必须用一个数组保存

直接贴代码:

public class ListTestActivity extends Activity
{
ListView mListView;
Map<Integer, String> mMapContent;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mMapContent = new HashMap<Integer, String>();
mListView = (ListView)findViewById(R.id.listview);
mListView.setAdapter(new MyListAdapter(this, 20));
}

class MyListAdapter extends BaseAdapter
{
int mCount;
Context mContext;

public MyListAdapter(Context context, int count)
{
mCount = count;
mContext = context;
}

public int getCount()
{
return mCount;
}

public Object getItem(int arg0)
{
return arg0;
}

public long getItemId(int arg0)
{
return arg0;
}

public View getView(int position, View convertView, ViewGroup arg2)
{
ViewHold holder = null;
if(convertView == null)
{
convertView = LinearLayout.inflate(mContext, R.layout.list_item, null);
holder = new ViewHold(convertView);
convertView.setTag(holder);
}
else
{
holder = (ViewHold)convertView.getTag();
}

holder.position = position;
holder.textView.setText("listitem" + position + ":");
holder.editText.setText(mMapContent.get(position));//Integer.valueOf(position)

return convertView;
}

class ViewHold
{
TextView textView;
EditText editText;
int position;

public ViewHold(View v)
{
textView = (TextView)v.findViewById(R.id.textview);
editText = (EditText)v.findViewById(R.id.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)
{
mMapContent.put(position, s.toString());
}
});
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: