在ListView中加载BaseAdapter的getView()方法,加载了十个EditText,当第一个EditText中输入数据后第八个Edittex也有

violet19890610 2012-04-16 02:21:23
我在ListView中用BaseAdapter的getView()方法加载适配器,每个Item里有一个TextView和一个EditText,当我在第一个EditText里面输入数据,比如1234时,同时会在第八个EditText中也出现1234,同样的,如果我在第二个EditText中输入1234,那么在第九个EditText中就会出现1234,以此类推,不知道是怎么回事,网上查了一下说getView()有记忆功能,不知道是什么意思。下面是我的代码,请高手指教,小女子谢谢大家了!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:selectAllOnFocus="true"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>


public class LVTestActivity extends Activity {
/** Called when the activity is first created. */
ListView lv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
ListView lv = (ListView)findViewById(R.id.lv);
MyBaseAdapter adapter = new MyBaseAdapter();
lv.setAdapter(adapter);
}
class MyBaseAdapter extends BaseAdapter
{
@Override
public int getCount() {
// TODO Auto-generated method stub
return 10;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView==null){
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
}else{
}
TextView tv = (TextView) convertView.findViewById(R.id.textView1);
tv.setText("测试:"+position);
return convertView;
}
}
}
...全文
1467 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
信-鸽 2014-11-23
  • 打赏
  • 举报
回复
谢谢,根据27楼我解决了我的问题。另外总结出不能从ListView里直接循环读取EditText的值,要用Iterator来读取HashMap.
  • 打赏
  • 举报
回复
引用 31 楼 tracy891110 的回复:
非常感谢。。。。帮了我大忙了。。。
怎么帮你大忙啊。她的那个 ,连数据都没有啊。我是初学者,不太懂,也有类似问题啊。能否帮忙一下?谢谢。 我qq:6493298
tracy891110 2014-05-14
  • 打赏
  • 举报
回复
非常感谢。。。。帮了我大忙了。。。
violet19890610 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 的回复:]
editText中的 内容 需要 保存

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

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

所以在adapter 的getView方法中 必须每次重新设置数据
像textView CheckBox 等变化 的 状态必须用一个数组保存
[/Quote]
谢谢你的回复,你来晚了一步,我都结贴了,分数都给别人了,不好意思!
yitiaochongzi 2012-04-17
  • 打赏
  • 举报
回复
editText中的 内容 需要 保存

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

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

所以在adapter 的getView方法中 必须每次重新设置数据
像textView CheckBox 等变化 的 状态必须用一个数组保存
violet19890610 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 的回复:]
能不能把layout的item高度修改低一些,让这些在一个屏里面显示。。。。
[/Quote]
这样治标不治本的,呵呵,不过还是谢谢你的提示!
violet19890610 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 的回复:]
我在我这边测试好用了啊!
你用我在21楼放的代码,另外把工程clean一下吧(那里我只改了适配器)
改了这么多次。。。。。。
[/Quote]
真的非常感谢一直有耐性帮我解决问题,问题已经解决了,代码如下,供大家参考:
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());
}
});
}
}
}
}
傲慢的上校 2012-04-16
  • 打赏
  • 举报
回复
能不能把layout的item高度修改低一些,让这些在一个屏里面显示。。。。
  • 打赏
  • 举报
回复
我在我这边测试好用了啊!
你用我在21楼放的代码,另外把工程clean一下吧(那里我只改了适配器)
改了这么多次。。。。。。
violet19890610 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
由于着急,所以能用数组和map的地方,我就直接用switch了,到时候设计的时候,自己优化下。
[/Quote]
能加一下你的QQ吗?方便指导,我的:806745508,没有恶意,不方便的话也没关系的。
violet19890610 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
由于着急,所以能用数组和map的地方,我就直接用switch了,到时候设计的时候,自己优化下。
[/Quote]
我都不好意思再给你添堵了,还是不行啊。运行时,先在0里面输入123,滚动到下面,是可以的,8没有出现123了,但是再滚动回去0里面的123却消失了,然后我接着在0里面输入123,再滚动到下面,结果7和8里面都出现了123,再滚动回去,0和2里面出现了123,还是不行。
  • 打赏
  • 举报
回复
由于着急,所以能用数组和map的地方,我就直接用switch了,到时候设计的时候,自己优化下。
  • 打赏
  • 举报
回复
整个适配器的代码:
试一下吧


class MyBaseAdapter extends BaseAdapter
{
private String etstring0="";
private String etstring1="";
private String etstring2="";
private String etstring3="";
private String etstring4="";
private String etstring5="";
private String etstring6="";
private String etstring7="";
private String etstring8="";
private String etstring9="";

MyBaseAdapter(){};
@Override
public int getCount() {
// TODO Auto-generated method stub
return 10;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView==null){
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
}else{
}
TextView tv = (TextView) convertView.findViewById(R.id.textView1);
tv.setText("测试:"+position);
EditText et = (EditText) convertView.findViewById(R.id.editText1);
et.addTextChangedListener(new HRButtonListener(position,et));

switch(position)
{case 0:
et.setText(etstring0);
break;
case 1:
et.setText(etstring1);
break;
case 2:
et.setText(etstring2);
break;
case 3:
et.setText(etstring3);
break;
case 4:
et.setText(etstring4);
break;
case 5:
et.setText(etstring5);
break;
case 6:
et.setText(etstring6);
break;
case 7:
et.setText(etstring7);
break;
case 8:
et.setText(etstring8);
break;
case 9:
et.setText(etstring9);
default:
break;

}
return convertView;

}
class HRButtonListener implements TextWatcher {
private int position;
private EditText et_this;

HRButtonListener(int pos,EditText et) {
position = pos;
et_this =et;
}

@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}

@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
String strtemp;
strtemp=et_this.getText().toString();
switch(this.position)
{case 0:
etstring0=strtemp;
break;
case 1:
etstring1=strtemp;
break;
case 2:
etstring2=strtemp;
break;
case 3:
etstring3=strtemp;
break;
case 4:
etstring4=strtemp;
break;
case 5:
etstring5=strtemp;
break;
case 6:
etstring6=strtemp;
break;
case 7:
etstring7=strtemp;
break;
case 8:
etstring8=strtemp;
break;
case 9:
etstring9=strtemp;
default:
break;

}

}


}




}
violet19890610 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]
等下,我用事件监听的方法吧。
稍等!
[/Quote]
真的非常感谢!不管问题有没有解决我都十分感谢你。
  • 打赏
  • 举报
回复
等下,我用事件监听的方法吧。
稍等!
violet19890610 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
改些东西试一下:
变量定义部分改为:
private String etstring0="";
private String etstring1="";
private String etstring8="";
private String etstring9="";

ETshow()方法改为:
private void ETshow(int position,View conv……
[/Quote]
改了之后试了试,好乱啊,我都不知道该怎么跟你描述了,就是特别不稳定,在0中输入123,滚动出屏幕后再滚回去,乍一看都调试好了,多滚动两次就发现在9中有123,然后在2中输入数据,滚动出去再滚动回来,2里面的数据就消失了,不能保存,总之就是好乱啊。
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
引用 14 楼 的回复:
问一下,前边说的第一个,第八个。跑出来在测试程序上显示的是:
测试:1
测试:8

是这样吗?
还是测试0,测试7,具体的用后边的数字描述一下。
我这个方法的对应关系可能有点问题

不好意思,是我没说明白,误导你了,是这样的,
测试:0 —— 测试:8
测试:1 —— 测试:9
测试:2 —— 没有了
谢谢你拿宝贵的时候给我回复问题,真的非常感谢……
[/Quote]

没事!没事!
有问题大家一起解决,这样学习进步快!
呵呵!
  • 打赏
  • 举报
回复
改些东西试一下:
变量定义部分改为:
private String etstring0="";
private String etstring1="";
private String etstring8="";
private String etstring9="";

ETshow()方法改为:
private void ETshow(int position,View convertView){
String tempstr="";
EditText et = (EditText) convertView.findViewById(R.id.editText1);

switch(position){
case 0:
tempstr=etstring0;
if(et.getText()!=null){etstring8=et.getText().toString();}
break;
case 1:
tempstr=etstring1;
if(et.getText()!=null){etstring9=et.getText().toString();}
break;
case 8:
tempstr=etstring8;
if(et.getText()!=null){etstring0=et.getText().toString();}
break;
case 9:
tempstr=etstring9;
if(et.getText()!=null){etstring1=et.getText().toString();}
break;
default:
break;
}
et.setText(tempstr);
}

这样试一下看看。
violet19890610 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
问一下,前边说的第一个,第八个。跑出来在测试程序上显示的是:
测试:1
测试:8

是这样吗?
还是测试0,测试7,具体的用后边的数字描述一下。
我这个方法的对应关系可能有点问题
[/Quote]
不好意思,是我没说明白,误导你了,是这样的,
测试:0 —— 测试:8
测试:1 —— 测试:9
测试:2 —— 没有了
谢谢你拿宝贵的时候给我回复问题,真的非常感谢!
  • 打赏
  • 举报
回复
问一下,前边说的第一个,第八个。跑出来在测试程序上显示的是:
测试:1
测试:8

是这样吗?
还是测试0,测试7,具体的用后边的数字描述一下。
我这个方法的对应关系可能有点问题
加载更多回复(13)

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧