Listview con EditExt - TextWatcher Ricarica View
-
13-12-2019 - |
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;
}
. 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 ..