2013-09-01 25 views
0

I 得到了一個列表,我想在ListView中顯示,使用我自己的自定義適配器。 所以這個列表中有一些空值,還有一些「重要的」非空值。製作帶有一些空值的列表的適配器

這可能是這樣的:

(N代表空)

(d representint一些有價值的數據)

myList中: [N,N,d,d,N,N- ,D,N,D,N,N]。

所以我有我的適配器,但我無法處理列表中的空值。

這是我的適配器:

公共類ItemAdapter擴展ArrayAdapter {

List<Item> itemList; 
private Activity act; 
boolean selling; 

public ItemAdapter(Activity act, List<Item> itemList, boolean selling) { 
    super(act, R.layout.item_view_layout, itemList); 

    this.itemList = itemList; 
    this.act = act; 
    this.selling = selling; 
} 

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


     ViewHolder holder; 
     final Item itemManipulated = itemList.get(position); 

     if (convertView == null) { 

      convertView = new ItemInShopView(act, itemManipulated); 

      holder = new ViewHolder(); 
      holder.convertView = convertView; 
      holder.itemNameTextView = (TextView) ((ItemView) convertView).getItemNameTextView(); 
      holder.iconImageView = (ImageView) ((ItemView) convertView).getItemIconImageView(); 
      holder.coinView = (CoinView) ((ItemInShopView) convertView).getCoinView(); 
      holder.coinView.init(act); 
      holder.itemRarityHidedTextView = (TextView) ((ItemView) convertView).getItemRarityHidedTextView(); 

      convertView.setTag(holder); 

     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


      holder.itemNameTextView.setText(itemManipulated.getName()); 
      holder.iconImageView.setImageResource(itemManipulated.getIcon()); 
      holder.itemRarityHidedTextView.setText(itemManipulated.getRarity()); 

      Colorer.setTextViewColorByItemRarity(holder.itemNameTextView, holder.getRarity(), act); 

      if (selling) { 
       holder.coinView.setCoins(itemManipulated.getSellPrice()); 
      } else { 
       holder.coinView.setCoins(itemManipulated.getPrice()); 
      } 

      holder.convertView.setOnClickListener(new OnClickListenerWithPreventDoubleTapper(itemManipulated)); 

      holder.convertView.setOnLongClickListener(new OnLongClickListener() { 

       @Override 
       public boolean onLongClick(View v) { 
        return false; 
       } 
      }); 

      return convertView; 


} 

class OnClickListenerWithPreventDoubleTapper extends OnClickListenerWithPreventDoubleTap { 

    Item item; 

    public OnClickListenerWithPreventDoubleTapper(Item item) { 
     this.item = item; 

    } 

    @Override 
    protected void performAction() { 
     new ItemDialog(act, item).show(); 
    } 

} 

static class ViewHolder { 

    TextView itemRarityHidedTextView; 
    TextView itemNameTextView; 
    ImageView iconImageView; 
    CoinView coinView; 

    View convertView; 

    public String getRarity() { 
     return itemRarityHidedTextView.getText().toString(); 
    } 
} 

} 

我怎麼能實現某種方式來獲取適配器處理空值,顯示什麼都沒有,也可能顯示一個虛擬佈局什麼也沒有呢?

我不能創建一個沒有空值的新列表,並將這些新列表傳遞給適配器,因爲空值在其他視圖中具有重要意義。

我希望我的問題很清楚。如果可以的話請幫忙。

回答

0

爲什麼不只是?

if (itemManipulated != null){ 
     holder.itemNameTextView.setText(itemManipulated.getName()); 
     holder.iconImageView.setImageResource(itemManipulated.getIcon()); 
     holder.itemRarityHidedTextView.setText(itemManipulated.getRarity()); 

     Colorer.setTextViewColorByItemRarity(holder.itemNameTextView, holder.getRarity(),act); 

     if (selling) { 
      holder.coinView.setCoins(itemManipulated.getSellPrice()); 
     } else { 
      holder.coinView.setCoins(itemManipulated.getPrice()); 
     } 
    } else { 
     holder.itemNameTextView.setText("No Item"); 
     ... (whatever default values you like) 
    } 

編輯: 如果您不希望顯示在所有空,你需要做更復雜的東西。

在getView

:發現第n個實際數據

在getCount將的:回到我只是需要忽略空值,好像他們不存在實際的數據

getView: 
int posInArray = -1; 
for (int i =0; i <= position; i++){ 
    posInArray++; 
    while(itemList.get(posInArray) == null){ 
     posInArray++; 
    } 
} 
itemManipulated = itemList.get(posInArray); 
... 


getCount: 
int count = 0; 
for(int i = 0; i < itemList.size(); i++){ 
    if (itemList.get(i) != null){ 
     count++; 
    } 
} 
return count; 
+0

的件數。 我不需要空值的列表項。 –