0

有一个列表,我想使用我自己的自定义适配器在 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();
    }
}

}

我怎样才能实现某种方法来让适配器处理空值并且在那里什么都没有显示,或者可能显示一个没有任何内容的虚拟布局?

我无法创建没有空值的新列表并将这些新列表传递给适配器,因为空值在其他视图中具有重要意义。

我希望我的问题很清楚。如果可以的话请帮忙。

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条实际数据

在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 回答