2016-09-29 3 views
0

umgewandelt werden Ich habe eine listview mit adapter Verlängerung BaseAdapter in Fragment. Auf dieser listview habe ich scrollview Listener implementiert, die erkennen, wenn Benutzer das Ende listview erreichen. In diesem Fall werden mehr Daten geladen. Ich habe auch eine Schaltfläche auf diesem Fragment, die beim Klicken alle Filter zurücksetzen und die Liste mit Startelementen neu laden wird. Das Problem ist, wenn der Benutzer unten scrollt und in der gleichen Zeit (vor neue Elemente geladen werden) drücken Sie die Taste App wird mit folgendem Fehler abstürzen:java.lang.Boolean kann nicht in ba.store.models.Merchants

java.lang.Boolean cannot be cast to ba.store.models.Merchants 

Dies ist der Code, wo es bricht auseinander:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = null; 
    Integer identity; 
    ViewHolder viewHolder = null; 
    notifyDataSetChanged(); 
    if (convertView == null) { 
     view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sales_place_item, parent, false); 
     viewHolder = new ViewHolder(view); 
     view.setTag(viewHolder); 

    } else { 
     view = convertView; 
     viewHolder = (ViewHolder) view.getTag(); 

    } 
    Merchants merchants = (Merchants) getItem(position); 
    if (merchants != null) { 
     identity = merchants.getMerchantId(); 
     viewHolder.merchant_name.setText(merchants.getMerchantName()); 
     viewHolder.merchant_category.setText(merchants.getCategoryName().toUpperCase()); 
     viewHolder.border_limit.setText(merchants.getBorderLimitAmount().toString() + " KM"); 
     viewHolder.end_loyalty.setText(merchants.getEndLoyaltyPoints().toString()); 
     viewHolder.begin_loyalty.setText(merchants.getStartLoyaltyPoints().toString()); 

     if (merchants.getImagePath().equals("")) 
      Picasso.with(view.getContext()).load(R.drawable.placeholder_sales).fit().into(viewHolder.merchant_image); 
     else 
      Picasso.with(view.getContext()).load(merchants.getImagePath()).fit().into(viewHolder.merchant_image); 

    } 


    return view; 

} 

getItem Methode:

@Override 
public Object getItem(int position) { 
    if (merchants.size() > 0) { 
     return merchants.get(position); 
    } else 
     return false; 
} 
+0

umgewandelt werden Bitte fügen Sie die Umsetzung der Methode getItem() – Kelevandos

+0

Warum deaktivieren Sie die Schaltfläche nicht vor dem Zeitpunkt, an dem die Daten geladen und an Ihre Liste angehängt werden? – Nishith

Antwort

1

Das Problem ist Ihre getItem() Methode.

Wenn keine Daten angezeigt werden sollen, gibt die Methode false zurück, einen booleschen Wert. Dies bricht die Besetzung in getview().

Ändern der getItem() Methode dazu:

@Override 
public Object getItem(int position) { 
    if (merchants.size() > 0) 
     return merchants.get(position); 
    else 
     return null; 
} 

Und in getView() ersetzen:

Merchants merchants = (Merchants) getItem(position); 
    if (merchants != null) { 
     identity = merchants.getMerchantId(); 
     ... 

mit:

if (getItem(position) != null) { 
    Merchants merchants = (Merchants) getItem(position); 
    identity = merchants.getMerchantId(); 
    ... 

Dies wird den Absturz beheben, aber Sie haben auch um zu überprüfen, warum merchants.getSize() 0 ist.

Versuchen
1

ersetzt getItem() wie folgt

@Override 
public Object getItem(int position) { 
    if (merchants.size() > 0) { 
     return merchants.get(position); 
    } else 
     return null; 
} 

wie Sie false in Ihrer Methode zurückkehren, wenn es von Größe ist gleich Null ist, Es ist Casting Fehler beim Erstellen sagen false nicht zu Merchants

+0

Dies wird die Logik stören. Adapter sollten nur den Inhalt des Datensatzes anzeigen und nicht in irgendeiner Weise bearbeiten. – Kelevandos

+0

@ Kelevandos danke für den Hinweis auf Fehler :) – Nikhil

Verwandte Themen