Skip to content Skip to sidebar Skip to footer

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 List

Solution 1:

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.

protectedinterfaceMyTextWatcherextendsTextWatcher {

    publicvoidsetEnabled(EditText editText, boolean enable);

    publicvoidsetText(EditText editText, String text);
}

privateMyTextWatchergeneralTextWatcher=newMyTextWatcher() {

        privatebooleanenabled_edtQty=true;
        privatebooleanenabled_edtPackingQty=true;

        publicvoidsetEnabled(EditText editText, boolean enable) {
            if (editText.equals(edtQty))
            {
                this.enabled_edtQty = enable;
            }
            elseif (editText.equals(edtPackingQty))
            {
                this.enabled_edtPackingQty = enable;
            }
        }

        @OverridepublicvoidonTextChanged(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);
            }
            elseif (this.enabled_edtPackingQty && edtPackingQty != null
                    && edtPackingQty.getText().hashCode() == s.hashCode())
            {
                edtPackingQty_onTextChanged(s, start, before, count);
            }
        }

        @OverridepublicvoidbeforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @OverridepublicvoidafterTextChanged(Editable s) {

        }

        @OverridepublicvoidsetText(EditText editText, String text) {

            this.setEnabled(editText, false);

            editText.setText(text);

            this.setEnabled(editText, true);
        }

    };


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

            View rowView;
            finalMyClassitem= getItem(position);

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

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


    }


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

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

in your situation you should use addTextChangedListener instead of setOnCheckedChangeListener

Solution 2:

the answer by breceivemail is correct,

you can also try using ArrayList for storing data onTextChangeListener can store data when needed and you can restore data in getView of your listview's adapter

Note: if you are searching for stopping the listview from refreshing on scrolling, then you are going in wrong direction, because we can't stop listview from refreshing its contents(because all off screen contents are dumped in listviews), adapters are made to store/provide data when needed by listview(you can't rely on system to protect/store data you should store/restore data manually).

Post a Comment for "Prevent Custom Listview Refreshing On Scroll. I Want To Stop Refreshing"