日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

ViewHolder VS HolderView ?

發(fā)布時(shí)間:2025/7/25 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ViewHolder VS HolderView ? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ViewHolder 模式在 Android 中大家應(yīng)該都不陌生了,特別是在 ListView 中通過(guò) ViewHolder 來(lái)減少?findViewById 的調(diào)用和 類(lèi)型的轉(zhuǎn)換。

而 HolderView 模式是把 ViewHolder 給業(yè)務(wù)邏輯化,不再僅僅只是保存一些 View, 還要帶有業(yè)務(wù)邏輯。 HolderView 的一個(gè)示例如下:

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); } // 業(yè)務(wù)邏輯代碼 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); } }
view rawNotificationLayoutItem.java?hosted with ? by?GitHub
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>
view rawlayout_item.xml?hosted with ? by?GitHub


可以看到,現(xiàn)在設(shè)置數(shù)據(jù)的邏輯 放到該 HolderView 中了, 這樣關(guān)于該模塊的功能就集中在一起了,不是散落到 Adapter (或者其他地方) 的 getView 中了。

?

經(jīng)過(guò)幾個(gè)項(xiàng)目的試驗(yàn), 個(gè)人發(fā)現(xiàn)通過(guò) HolderView 可以讓代碼維護(hù)起來(lái)更加方便,查找起來(lái)比較模塊化。

VIA:jayway


轉(zhuǎn)載于:https://www.cnblogs.com/krislight1105/p/3748308.html

總結(jié)

以上是生活随笔為你收集整理的ViewHolder VS HolderView ?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。