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