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;
}
这两个里面都return position试试
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
这两个里面都return position试试
listview的显示机制,可以在网上找到的。如果没猜错,你的程序的第一个EditText和第八个EditText不会同时完全出现在屏幕上。出现这种现象的原因,是当最上边的item移除屏幕后,它的对象会被缓存。
而下一个要从底部出来,要显示的item出现的时候,会判断其布局(context)与缓存中的是否一样。
一样的情况下,会把缓存里的context作为getView的参数传进来。
这样在画第八个item的时候,由于没有对EditText做任何改动,
所以系统就将第一个的EditText内容显示出来了。
所以出现了你看到的情况。
public View getView(int position, View convertView, ViewGroup parent) {
holder = new Holder();
convertView = inflater.inflate(R.layout.item_activity,
null);
holder.image_cover = (ImageView) convertView
.findViewById(R.id.ImageView01);
holder.tv_name = (TextView) convertView
.findViewById(R.id.TextView01);
}试下
这样可以记录之前输入的内容。
并且我加了一个方法来实现EditText的数据保存与更新。(PS:我这儿暂时没环境,你那边试一下调,有错误多担待,主要思路应该没错)
class MyBaseAdapter extends BaseAdapter
{private String etstring1="";
private String etstring2="";
private String etstring3="";
private String etstring8="";
private String etstring9="";
private String etstring10="";@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{
}
ETshow(position,convertView );
TextView tv = (TextView) convertView.findViewById(R.id.textView1);
tv.setText("测试:"+position);
return convertView;
}
private void ETshow(int position,View convertView){
string tempstr="";
EditText et = (EditText) convertView.findViewById(R.id.editText1);switch(position){
case 0:
tempstr=etstring1;
if(et.getText()!=null){etstring8=et.getText().toString();}
break;
case 1:
tempstr=etstring2;
if(et.getText()!=null){etstring9=et.getText().toString();}
break;
case 2:
tempstr=etstring3;
if(et.getText()!=null){etstring10=et.getText().toString();}
break;
case 7:
tempstr=etstring8;
if(et.getText()!=null){etstring1=et.getText().toString();}
break;
case 8:
tempstr=etstring9;
if(et.getText()!=null){etstring2=et.getText().toString();}
break;
case 9:
tempstr=etstring10;
if(et.getText()!=null){etstring3=et.getText().toString();}
break;
default:
break;
}
et.setText(tempstr);}
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
TextView tv = (TextView) v.findViewById(R.id.textView1);
tv.setText("测试:"+position);
return v;
}
}
不要使用缓存了的convertView,试一试。
变量定义部分改为:
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);
}这样试一下看看。