Note that there are some explanatory texts on larger screens.

plurals
  1. POComplex example of ListView getItemViewType()
    primarykey
    data
    text
    <p>I have a <code>ListView</code> that is complex in that there are possible scenarios for 4 view types e.g. <code>{ book, movie, music cd, concert }</code></p> <p>Currently, to decide on what object to inflate etc, I get the item that relates to the list row. I will then do a <code>switch()</code> on the type field of the object.</p> <p>This has left me with a lot of code and heavy lifting in the <code>getView()</code>.</p> <p>Am I correct in saying that <code>getItemViewType()</code> is used to return the correct view type for the current item?</p> <p>Where would I find an example of a <code>ListAdapter</code> that uses this approach? Note: this is in an attempt to smooth out my <code>ListView</code> that is quite sluggish now.</p> <p>Thanks</p> <p><strong>EDIT: My Adapter</strong></p> <pre><code>public class MyListAdapter extends BaseAdapter implements ListAdapter { private Context ctx; private int layoutResourceId; private ArrayList&lt;ItemType&gt; items; public MyListAdapter(Context context, ArrayList&lt;ItemType&gt; 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&lt;ItemType&gt; getitems() { return items; } public void setitems(ArrayList&lt;ItemType&gt; items) { this.items = items; } public int getFirstTransactionId() { int result = 0; if (items != null &amp;&amp; !items.isEmpty()) { ItemType txn = items.get(0); result = txn.getId(); } return result; } public int getLastTransactionId() { int result = 0; if (items != null &amp;&amp; !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; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload