Creating ViewHolders for ListViews with different item layouts

前端 未结 2 1001
庸人自扰
庸人自扰 2020-11-27 10:18

I have a ListView with different layouts for different items. Some items are separators. Some items are different because they hold different kinds of data, etc.

I

2条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-27 11:02

    Another example.

    public class CardArrayAdapter extends ArrayAdapter {

    public CardArrayAdapter(Context context) {
        super(context, R.layout.adapter_card);
    }
    
    @Override
    public View getView(int position, View view, ViewGroup parent) {
    
        final Card card = getItem(position);
        ViewHolder holder;
    
        //if (view != null) {
            //holder = (ViewHolder) view.getTag();
        //} else {
        Log.d("card.important?", card.name + " = " + Boolean.toString(card.important));
        if(card.important) {
            view = LayoutInflater.from(getContext()).inflate(R.layout.adapter_card_important, parent, false);
        }else {
            view = LayoutInflater.from(getContext()).inflate(R.layout.adapter_card, parent, false);
        }
        holder = new ViewHolder(view);
        view.setTag(holder);
        //}
    
        // IMG
        Picasso.with(getContext())
                .load(card.logo)
                .placeholder(R.drawable.ic_phonebook)
                .error(R.drawable.ic_phonebook)
                .fit()
                .centerCrop()
                .transform(new CircleTransform())
                .into(holder.logo);
    
        holder.name.setText(card.name);
    
        if(card.important) {
            holder.category.setVisibility(View.VISIBLE);
            if (card.category.equals("airline")) {
                card.category = "airlines";
            }
            int id = getContext().getResources().getIdentifier(card.category, "string", getContext().getPackageName());
            holder.category.setText(getContext().getResources().getString(id));
        }else {
            holder.category.setVisibility(View.GONE);
        }
    
        holder.tagline.setText(card.tagline);
        holder.favorite.setChecked(card.favorite);
    
        holder.favorite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                card.favorite = ((CheckBox) v).isChecked();
                card.save();
            }
        });
    
        return view;
    
    }
    
    static class ViewHolder {
        @InjectView(R.id.logo) ImageView logo;
        @InjectView(R.id.name) TextView name;
        @InjectView(R.id.category) TextView category;
        @InjectView(R.id.tagline) TextView tagline;
        @InjectView(R.id.favorite) CheckBox favorite;
        public ViewHolder(View view) {
            ButterKnife.inject(this, view);
        }
    }
    

    }

提交回复
热议问题