Создание адаптера для списка с некоторыми нулевыми значениями

У меня есть список, который я хотел бы отобразить в ListView, используя свой собственный адаптер. Таким образом, в этом списке есть некоторые нулевые значения, а также некоторые "важные" ненулевые значения.

Это может быть так:

(N представляет ноль)

(D представляет некоторые ценные данные)

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();
    }
}

}

Как я могу реализовать какой-то способ, чтобы адаптер обрабатывал нулевые значения и ничего там не отображал, или, может быть, показать фиктивный макет, на котором ничего нет?

Я не мог создать новый список без нулевых значений и передать этот новый список адаптеру, потому что нули имеют важное значение в другом представлении.

Я надеюсь, что моя проблема ясна. Пожалуйста, помоги, если можешь.


person Adam Varhegyi    schedule 01.09.2013    source источник


Ответы (1)


Почему не просто?

    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: найти энную часть фактических данных

в 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;
person Tristan Burnside    schedule 01.09.2013
comment
Мне нужно просто игнорировать нулевые значения, как будто их не существует. Мне не нужны элементы списка для нулей. - person Adam Varhegyi; 03.09.2013