2013-01-05 140 views
2

我在我的Android应用程序中使用自定义ListView。问题是当我滚动ListView时,它会自动清除EditText中输入的数据(Edittext作为list_item)并刷新ListView。我想阻止它停止在ListView Scroll上清除输入的数据。 请帮助我..防止自定义ListView刷新滚动。我想停止刷新

+0

显示你的代码.. ??? – QuokMoon

回答

1

1)定义自定义列表适配器

2)定义的对象为每个项目像class MyClass { String myText}

3)每个项目的EditText上的值存储在该对象

我具有用于存储CheckBox的状态的代码。为EditText使用和定制它。

protected interface MyTextWatcher extends TextWatcher { 

    public void setEnabled(EditText editText, boolean enable); 

    public void setText(EditText editText, String text); 
} 

private MyTextWatcher generalTextWatcher = new MyTextWatcher() { 

     private boolean enabled_edtQty = true; 
     private boolean enabled_edtPackingQty = true; 

     public void setEnabled(EditText editText, boolean enable) { 
      if (editText.equals(edtQty)) 
      { 
       this.enabled_edtQty = enable; 
      } 
      else if (editText.equals(edtPackingQty)) 
      { 
       this.enabled_edtPackingQty = enable; 
      } 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      if (this.enabled_edtQty && edtQty != null 
        && edtQty.getText().hashCode() == s.hashCode()) 
      { 
       edtQty_onTextChanged(s, start, before, count); 
      } 
      else if (this.enabled_edtPackingQty && edtPackingQty != null 
        && edtPackingQty.getText().hashCode() == s.hashCode()) 
      { 
       edtPackingQty_onTextChanged(s, start, before, count); 
      } 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 

     @Override 
     public void setText(EditText editText, String text) { 

      this.setEnabled(editText, false); 

      editText.setText(text); 

      this.setEnabled(editText, true); 
     } 

    }; 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

      View rowView; 
      final MyClass item = getItem(position); 

      edtQty.addTextChangedListener(generalTextWatcher); 
      edtPackingQty.addTextChangedListener(generalTextWatcher); 

      generalTextWatcher.setText(edtQty, item.myText1); 
      generalTextWatcher.setText(edtPackingQty, item.myText2); 


    } 


    protected void edtQty_onTextChanged(CharSequence s, int start, int before, 
      int count) { 
           item.myText1 = s; 
      } 

    protected void edtPackingQty_onTextChanged(CharSequence s, int start, int before, 
      int count) { 
           item.myText2 = s; 
      } 

在你的情况,你应该使用的addTextChangedListener代替setOnCheckedChangeListener

+0

我在一个列表项中有两个EditText控件,所以当我得到更多记录时,我该如何维护值运行时? – Ajay

+0

@Android_User我更新了我的答案 – breceivemail

+0

Thanx For Help。但我有点困惑。你能告诉我什么是“EntAcc002”吗? – Ajay

0

由breceivemail的答案是正确的,

,你也可以尝试使用ArrayList中存储数据所需 时 onTextChangeListener可以存储数据和你可以在你的ListView的适配器

注意的getView恢复数据:如果你正在寻找停车将L从清凉的上滚动istview,那么你会在错误的方向,因为我们不能刷新其内容(因为所有关闭屏幕内容在列表视图倾倒)停止列表视图,适配器是由储存/需要时的ListView提供数据(你不能依靠系统来保护/存储你应该手动存储/恢复数据的数据)。