I am using Custom ListView in My Android App. The Problem is when i am scrolling ListView, it automatically clears entered data from EditText( Edittext as a list_item ) and it ListView refreshed. I Want to Prevent it to stop clearing entered data on ListView Scroll. Please Help me..
1) define custom list adapter
2) define a an object for each item like class MyClass { String myText}
3) store the value of the EditText of each item in that object
I have a code for storing the state of CheckBox. use and customize it for 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;
}
in your situation you should use addTextChangedListener
instead of setOnCheckedChangeListener