0

独自のカスタム アダプターを使用して、ListView に表示したいリストを取得しました。したがって、このリストにはいくつかの null 値と、いくつかの「重要な」非 null 値があります。

次のようになります。

(N は Null を表す)

(D は、いくつかの貴重なデータを表します)

myList: [N,N,D,D,N,N,D,N,D,N,N] たとえば。

アダプターを入手しましたが、リスト内の null 値を処理できません。

これは私のアダプターです:

public class ItemAdapter extends 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();
    }
}

}

アダプターハンドルの null 値を取得してそこに何も表示しない、または何も表示しないダミーレイアウトを表示する方法を実装するにはどうすればよいですか?

null 値は他のビューで重要な意味を持つため、null 値のない新しいリストを作成してこれらの新しいリストをアダプターに渡すことはできませんでした。

私の問題が明確であることを願っています。できれば助けてください。

4

1 に答える 1

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 番目の部分を見つける

in 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;
于 2013-09-01T14:37:07.000 に答える