Search code examples
androidandroid-edittextpage-refreshcustom-listsonscroll

prevent Custom ListView Refreshing on scroll. I want to stop refreshing


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


Solution

  • 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