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试试

解决方案 »

  1.   

    是Recycler显示机制搞的鬼。
    listview的显示机制,可以在网上找到的。如果没猜错,你的程序的第一个EditText和第八个EditText不会同时完全出现在屏幕上。出现这种现象的原因,是当最上边的item移除屏幕后,它的对象会被缓存。
    而下一个要从底部出来,要显示的item出现的时候,会判断其布局(context)与缓存中的是否一样。
    一样的情况下,会把缓存里的context作为getView的参数传进来。
    这样在画第八个item的时候,由于没有对EditText做任何改动,
    所以系统就将第一个的EditText内容显示出来了。
    所以出现了你看到的情况。
      

  2.   

    你试着不保存数据,就像这样@Override
    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);

    }试下
      

  3.   

    将适配器改一下吧,你这仅是显示10个,我就用简单的变量记录,要是多的情况下,建议用map等其他数据结构记录下就可以了。
    这样可以记录之前输入的内容。
    并且我加了一个方法来实现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);}
    }
      

  4.   

    我的需求就是要保留EditText里面输入的数据的,所以不能不保留数据的。谢谢你了!
      

  5.   

    @Override
    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,试一试。
      

  6.   

    试了一下,出现了新问题,比如我在第0个EditText中输入123,然后滚动出此时的屏幕,下面第8个不会再出现123了,但是再滚动回去后发先123跑到第1个Edittext中了,而不是本来的第0个,接下来接着滚动,就出现一个循环,0——1——2——9——8——7,之前输入的内容依次在这个循环中出现。
      

  7.   

    不可以的,之前我没经过优化的代码就是直接像你这样return V;运行后,如果在一个EditText中输入数据,你接着滚动出屏幕,再滚动回去时,数据就消失了,没有保存起来。
      

  8.   

    改些东西试一下:
    变量定义部分改为:
      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);
    }这样试一下看看。