zoukankan      html  css  js  c++  java
  • 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>
    view rawlayout_item.xml hosted with ❤ by GitHub


    可以看到,现在设置数据的逻辑 放到该 HolderView 中了, 这样关于该模块的功能就集中在一起了,不是散落到 Adapter (或者其他地方) 的 getView 中了。

     

    经过几个项目的试验, 个人发现通过 HolderView 可以让代码维护起来更加方便,查找起来比较模块化。

    VIA:jayway


  • 相关阅读:
    设置CentOS7 静态获取IP
    视图与索引
    常用sql语句--DQL
    数据完整性
    常用sql语句--DML
    常用数据类型
    常用sql语句--DDL
    命令提示符内简单操作MySQL
    cnpm安装教程
    js生成指定范围的随机整数
  • 原文地址:https://www.cnblogs.com/krislight1105/p/3748308.html
Copyright © 2011-2022 走看看