ViewHolder VS HolderView ?
生活随笔
收集整理的這篇文章主要介紹了
ViewHolder VS HolderView ?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ViewHolder 模式在 Android 中大家應該都不陌生了,特別是在 ListView 中通過 ViewHolder 來減少?findViewById 的調用和 類型的轉換。
而 HolderView 模式是把 ViewHolder 給業務邏輯化,不再僅僅只是保存一些 View, 還要帶有業務邏輯。 HolderView 的一個示例如下:
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources.NotFoundException; import android.graphics.drawable.Drawable; import android.os.SystemClock; import android.text.format.DateUtils; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; public class NotificationLayoutItem extends RelativeLayout { public NotificationLayoutItem(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public NotificationLayoutItem(Context context, AttributeSet attrs) { super(context, attrs); } public NotificationLayoutItem(Context context) { super(context); } private ImageView mIcon; private TextView mText; private TextView mTime; @Override protected void onFinishInflate() { super.onFinishInflate(); mIcon = (ImageView) findViewById(R.id.notif_icon); mText = (TextView) findViewById(R.id.notif_text); mTime = (TextView) findViewById(R.id.notif_time); } // 業務邏輯代碼 public void setData(NotificationData data) { mText.setText(data.tickerText); mTime.setText(formatTime(data.time)); Drawable icon; try { icon = getContext().getPackageManager().getResourcesForApplication(data.packageName.toString()).getDrawable(data.icon); mIcon.setImageDrawable(icon); } catch (NotFoundException e) { e.printStackTrace(); } catch (NameNotFoundException e) { e.printStackTrace(); } } private CharSequence formatTime(long time) { return DateUtils.formatDateTime(getContext(), time, DateUtils.FORMAT_SHOW_TIME); } } |
| 1234567891011121314151617181920212223242526272829 | <?xml version="1.0" encoding="utf-8"?> <org.goodev.NotificationLayoutItem xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/notif_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <TextView android:id="@+id/notif_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" /> <TextView android:id="@+id/notif_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toLeftOf="@id/notif_time" android:layout_toRightOf="@id/notif_icon" android:ellipsize="none" android:maxLines="2" /> </org.goodev.NotificationLayoutItem> |
可以看到,現在設置數據的邏輯 放到該 HolderView 中了, 這樣關于該模塊的功能就集中在一起了,不是散落到 Adapter (或者其他地方) 的 getView 中了。
?
經過幾個項目的試驗, 個人發現通過 HolderView 可以讓代碼維護起來更加方便,查找起來比較模塊化。
VIA:jayway
轉載于:https://www.cnblogs.com/krislight1105/p/3748308.html
總結
以上是生活随笔為你收集整理的ViewHolder VS HolderView ?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类似 Google Tips 页面的卡片
- 下一篇: 【加】德鲁·卡宾森 - 质量效应3:天罚