2016-09-29 11 views
0

私はlistviewadapterがあり、フラグメントにはBaseAdapterがあります。その上でlistview私はユーザがlistviewの終わりに達する時を検出するscrollviewリスナを実装しました。その場合、より多くのデータがロードされます。また、私はクリックするとすべてのフィルタをリセットし、項目を開始してリストをリロードする、その断片のボタンを持っています。ユーザーが下にスクロールし、同じ時間にしたときの問題は、押しボタンアプリは、次のエラーでクラッシュします(新しい要素がロードされる前に)次のとおりです。java.lang.Booleanをba.store.models.Merchantsにキャストすることはできません

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

これは、それが離れて壊すのコードです:

@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メソッド:

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

に変換することはできませんと言っキャストエラーを作成しています、ゼロの実装を貼り付けてください – Kelevandos

+0

データがロードされてリストに追加されるまでボタンを無効にしないのはなぜですか? – Nishith

答えて

1

問題があなたのgetItem()方法です。

表示するデータがない場合、メソッドはfalse、ブール値を返します。これにより、キャストはgetview()に分割されます。

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

変更し、これにgetItem()方法:

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

そしてgetView()で、置き換えが

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

これはクラッシュを修正しますが、あなたはまた、持っていますなぜmerchants.getSize()が0であるかを確認してください。

1

それはサイズのだとき、あなたの方法でfalseを戻ってきているよう

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

を次のようにgetItem()を交換してみてくださいそれはfalseMerchants

+0

これはロジックを妨害します。アダプタは、データセットの内容を表示するだけで、編集することはできません。 – Kelevandos

+0

@Kelevandosは間違いを指摘してくれてありがとう:) – Nikhil

関連する問題