У меня есть ListView
, который является сложным в том, что существуют возможные сценарии для 4 типов вида, например. { book, movie, music cd, concert }
В настоящее время, чтобы решить, какой объект для раздувания и т.д., я получаю элемент, относящийся к строке списка. Затем я сделаю a switch()
в поле типа объекта.
Это оставило меня с большим количеством кода и тяжелым подъемом в getView()
.
Правильно ли я говорю, что getItemViewType()
используется для возврата правильного вида вида для текущего элемента?
Где я могу найти пример ListAdapter
, который использует этот подход? Примечание: это попытка сгладить мой ListView
, который теперь довольно вялый.
Спасибо
EDIT: Мой адаптер
public class MyListAdapter extends BaseAdapter implements ListAdapter {
private Context ctx;
private int layoutResourceId;
private ArrayList<ItemType> items;
public MyListAdapter(Context context, ArrayList<ItemType> data) {
this.layoutResourceId = R.layout.timeline_item_row;
this.ctx = context;
this.setitems(data);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
TimelineHolder holder = null;
ItemType transaction = getitems().get(position);
if (row == null) {
LayoutInflater inflater = ((Activity) ctx).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new TimelineHolder();
holder.imgActivityIcon = (ImageView)row.findViewById(R.id.imgActivityImageIcon);
holder.imgActivityLabel = (ImageView)row.findViewById(R.id.imgActivityImageLabel);
holder.lblMerchantName = (TextView)row.findViewById(R.id.lblMerchantName);
holder.lblLocation = (TextView)row.findViewById(R.id.lblLocation);
holder.lblActivityType = (TextView)row.findViewById(R.id.lblActivityType);
holder.lblActivityLabelUpper = (TextView)row.findViewById(R.id.lblActivityTypeLabel);
holder.lblTimeSinceActivity = (TextView)row.findViewById(R.id.lblTimeSinceActivity);
holder.lblActivityAmount = (TextView)row.findViewById(R.id.lblActivityAmount);
row.setTag(holder);
}
else {
holder = (TimelineHolder) row.getTag();
}
// Get/Populate common values here
String address = "";
Date hostTime = Helper.parse8601UTC(transaction.getCurrentHostTime());
Date transactionTime = Helper.parse8601UTC(transaction.getHostTransactionTime());
String merchantName = transaction.getMerchant().getName();
holder.lblMerchantName.setText(merchantName);
holder.lblLocation.setText(address);
holder.lblTimeSinceActivity.setText(Helper.timeSince(transactionTime, hostTime));
holder.lblActivityAmount.setText(Helper.doubleToCurrency(transaction.getAmount(), transaction.getCurrency()));
switch (transaction.getTransactionTypeId()) {
case TYPE_ONE:
holder.imgActivityIcon.setImageResource(R.drawable.redemmedicon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText(R.string.Loyalty_Earned);
holder.lblActivityLabelUpper.setText(R.string.EARNED);
holder.lblActivityAmount.setText(transaction.getResponsePoints() + " pts");
break;
case TYPE_TWO:
holder.imgActivityIcon.setImageResource(R.drawable.prepay_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText(R.string.Prepay_Redeem_Refund);
holder.lblActivityLabelUpper.setText(R.string.REDEEMED);
break;
case TYPE_THREE:
holder.imgActivityIcon.setImageResource(R.drawable.prepay_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityLabelUpper.setText(R.string.REFUND);
holder.lblActivityType.setText(R.string.Prepay_Purchase_Refund);
break;
case TYPE_FOUR:
holder.imgActivityIcon.setImageResource(R.drawable.prepay_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityLabelUpper.setText(R.string.REFUND);
holder.lblActivityType.setText(R.string.Prepay_Deposit_Refund);
break;
case TYPE_FIVE:
holder.imgActivityIcon.setImageResource(R.drawable.reward_earned_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText(R.string.Reward_Redeemed);
holder.lblActivityLabelUpper.setText(R.string.REDEEMED);
holder.lblActivityAmount.setText("");
break;
case TYPE_SIX:
holder.imgActivityIcon
.setImageResource(R.drawable.reward_earned_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.redeemed_flag);
holder.lblActivityType.setText(R.string.Points_Redeemed);
holder.lblActivityLabelUpper.setText(R.string.REDEEMED);
holder.lblActivityAmount.setText(transaction.getResponsePoints()
+ " pts");
break;
case TYPE_SEVEN:
holder.imgActivityIcon.setImageResource(R.drawable.stamp_2x);
holder.imgActivityLabel.setImageResource(R.drawable.redeemed_flag);
holder.lblActivityType.setText(R.string.Checked_In);
holder.lblActivityLabelUpper.setText(R.string.CHECK_IN);
holder.lblActivityAmount.setText("");
break;
case TYPE_EIGHT:
holder.imgActivityIcon.setImageResource(R.drawable.shared_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.redeemed_flag);
holder.lblActivityType.setText(R.string.Shared_Coupon);
holder.lblActivityLabelUpper.setText(R.string.SHARED);
holder.lblActivityAmount.setText("");
break;
case TYPE_NINE:
holder.imgActivityIcon.setImageResource(R.drawable.prepay_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText(R.string.Prepay_Deposit);
holder.lblActivityLabelUpper.setText(R.string.DEPOSIT);
break;
case TYPE_TEN:
holder.imgActivityIcon.setImageResource(R.drawable.prepay_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.redeemed_flag);
holder.lblActivityType.setText(R.string.Prepay_Purchase);
holder.lblActivityLabelUpper.setText(R.string.PURCHASE);
break;
case TYPE_ELEVEN:
holder.imgActivityIcon.setImageResource(R.drawable.prepay_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText(R.string.Prepay_Redeemed);
holder.lblActivityLabelUpper.setText(R.string.REDEEMED);
break;
case TYPE_TWELVE:
holder.imgActivityIcon.setImageResource(R.drawable.prepay_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText(R.string.Refund);
holder.lblActivityLabelUpper.setText(R.string.REFUND);
holder.lblActivityAmount.setText("");
break;
case TYPE_THIRTEEN:
holder.imgActivityIcon.setImageResource(R.drawable.prepay_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText(R.string.reversal);
holder.lblActivityLabelUpper.setText(R.string.REVERSAL);
holder.lblActivityAmount.setText("");
break;
case TYPE_FOURTEEN:
holder.imgActivityIcon.setImageResource(R.drawable.unlocked_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText(R.string.Check_In_Reward_Unlocked);
holder.lblActivityLabelUpper.setText(R.string.UNLOCKED);
holder.lblActivityAmount.setText("");
break;
case TYPE_FIFTEEN:
holder.imgActivityIcon.setImageResource(R.drawable.reward_earned_icon_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText(R.string.Coupon_Received);
holder.lblActivityLabelUpper.setText(R.string.RECEIVED);
holder.lblActivityAmount.setText("");
break;
default:
holder.imgActivityIcon.setImageResource(R.drawable.stamp_2x);
holder.imgActivityLabel.setImageResource(R.drawable.earned_flag);
holder.lblActivityType.setText("");
holder.lblActivityLabelUpper.setText("");
holder.lblActivityAmount.setText("");
break;
}
return row;
}
@Override
public int getCount() {
return getitems() == null ? 0 : getitems().size();
}
@Override
public Object getItem(int position) {
return getitems() == null ? null : getitems().get(
position);
}
@Override
public long getItemId(int position) {
return layoutResourceId;
}
public void addItem(ItemType item, boolean addFirst) {
if (addFirst) {
getitems().add(0, item);
} else {
getitems().add(item);
}
notifyDataSetChanged();
}
public ArrayList<ItemType> getitems() {
return items;
}
public void setitems(ArrayList<ItemType> items) {
this.items = items;
}
public int getFirstTransactionId() {
int result = 0;
if (items != null && !items.isEmpty()) {
ItemType txn = items.get(0);
result = txn.getId();
}
return result;
}
public int getLastTransactionId() {
int result = 0;
if (items != null && !items.isEmpty()) {
ItemType txn = items.get(items.size() - 1);
result = txn.getId();
}
return result;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public int getItemViewType(int position) {
return 0;
}
}