Domanda

Ho codificato un ListView con alcuni TextView e un EditText.Questo ha un TextWatcher che nel metodo afterTextChange() aggiunge un'istanza a una classe SIGLETON.Tutto va bene, ma quando sto scorrendo il ListView e sto modificando il valore di un EditText, ListView viene ricaricato e la barra di scorrimento viene restituita in cima. È un feedback normale o posso controllare questo comportamento?

Parte di TextWatcher

@Override
    public void afterTextChanged(Editable s) {
        if(!s.toString().isEmpty()){ 
            if (Integer.parseInt(s.toString())!=0){

                HashMap<Products, Integer> into=new HashMap<Products,Integer>();
                Products pr = new Products();
                into = cart.getProdotti();
                pr.set_id(Integer.parseInt(pro.get("id").toString()));
                pr.setPrezzo(Double.parseDouble(pro.get("prezzo").toString()));
                pr.setNome(pro.get("nome").toString());
                boolean flag = false;
                if(!into.isEmpty()){
                    Iterator<Products> iter = into.keySet().iterator();
                    while(iter.hasNext()){
                        if(pr.get_id()==iter.next().get_id()){
                            into.put(pr, Integer.parseInt(s.toString()));
                            cart.setProdotti(into);
                            flag = true;
                        }                       
                    }
                    if(flag==false){
                        into.put(pr, Integer.parseInt(s.toString()));
                        cart.setProdotti(into);
                    }
                }else{
                    into.put(pr, Integer.parseInt(s.toString()));
                    cart.setProdotti(into);
                }
            }
        }
    }
.

GetView of Adapter

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.product_row, null);

        TextView nome = (TextView)vi.findViewById(R.id.nomeProdotto); // title
        TextView descrizione = (TextView)vi.findViewById(R.id.descrizioneProdotto); // artist name
        TextView prezzo = (TextView)vi.findViewById(R.id.prezzoProdotto); // duration
        //ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
        final EditText quantity = (EditText)vi.findViewById(R.id.quantity);


        product = products.get(position);


        nome.setText(product.get("nome"));
        descrizione.setText(product.get("descrizione"));
        prezzo.setText("€"+product.get("prezzo"));
        quantity.setText("0");
        quantity.addTextChangedListener(new CustomTextWatcher(products.get(position)));
        //imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), thumb_image);
        return vi;
    }
.

È stato utile?

Soluzione

È un comportamento normale.È necessario memorizzare il primo indice visibile e impostarlo su di esso quando la ListView viene ricaricata.

È necessario utilizzare GETFIRSTSTIPOSITION () prima di ricaricare per trovare l'indice e dopo aver ricaricato Utilizzare SetSelection (Posizione) per impostarla la posizione vecchia vista.

Altri suggerimenti

Stai usando adapter.notifyDataSetChanged() per ricaricare la tua lista di elenco?Se usi questo, non affronterai un problema ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top