1. 程式人生 > >Android開發自定義Listview的Adapter基類以及通用ViewHolder的寫法

Android開發自定義Listview的Adapter基類以及通用ViewHolder的寫法

簡單的寫一個Adapter基類,不用每次寫adapter都呼叫一堆方法。


import android.widget.BaseAdapter;

import java.util.ArrayList;
import java.util.List;

public abstract class ListBaseAdapter extends BaseAdapter {
    protected List _data;
    public ListState listState = ListState.NONE;
    //這裡是下拉重新整理的狀態碼
    public enum ListState {
        NONE, REFRESHING, LOADMOREING;
    }

    public List getData() {
        return _data == null ? (_data = new ArrayList()) : _data;
    }

    @SuppressWarnings("rawtypes")
    public void setData(List data) {
        _data = data;
        notifyDataSetChanged();
    }

    @Override
    public boolean isEmpty() {
        if (_data == null) {
            return true;
        } else {
            if (_data.size() == 0) {
                return true;
            } else {
                return false;
            }
        }
    }

    @Override
    public int getCount() {
        if (_data == null) {
            return 0;
        }
        return _data.size();
    }

    @Override
    public Object getItem(int arg0) {
        if (_data != null && _data.size() > arg0) {
            return _data.get(arg0);
        }
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO 自動生成的方法存根
        return arg0;
    }

}

然後再簡單來搞個通用的ViewHolder,省得每次都要寫一堆Viewholder


import android.util.SparseArray;
import android.view.View;
import android.widget.Adapter;

public class ViewHolder {

    private final SparseArray<View> views;
    private View convertView;
    private Adapter adapter;

    public ViewHolder(View convertView) {
        this.views = new SparseArray<View>();
        this.convertView = convertView;
    }

    public <T extends View> T getView(int viewId) {
        View view = views.get(viewId);
        if (view == null) {
            view = convertView.findViewById(viewId);
            views.put(viewId, view);
        }
        return (T) view;
    }

    public Adapter getAdapter() {

        return adapter;
    }

    public void setAdapter(Adapter adapter) {
        this.adapter = adapter;
    }
}

要呼叫的時候,直接在adapter的getview裡呼叫:

      ViewHolder holder;
      if (convertView == null) {
          convertView = mInflater.inflate(R.layout.listitem_ads, parent, false);
          holder = new ViewHolder(convertView);
          convertView.setTag(holder);
      } else {
          holder = (ViewHolder) convertView.getTag();
      }
   View v_view = holder.getView(R.id.v_view);

相關推薦

Android發自定義Listview的Adapter以及通用ViewHolder寫法

簡單的寫一個Adapter基類,不用每次寫adapter都呼叫一堆方法。 import android.widget.BaseAdapter; import java.util.ArrayList; import java.util.List; public abstra

Android發自定義控制元件實現一個圓形進度條【帶數值和動畫】

實現一個如下圖所示的自定義控制元件,可以直觀地展示某個球隊在某個賽季的積分數和勝場、負場、平局數 首先對畫布進行區域劃分,整個控制元件分上下兩部分 上邊是個大的圓環,圓環中間兩行文字,沒什麼難度,選好圓心座標和半徑後直接繪製即可,繪製文字也是如此。 下部分是三個小的圓弧進

Android發自定義控制元件實現一個折線圖

實現一個如下圖所示的折線圖 首先是控制元件繪圖區域的劃分,控制元件左邊取一小部分(控制元件總寬度的八分之一)繪製表頭,右邊剩餘的部分繪製表格 確定表格的行列數,首先繪製一個三行八列的網格,設定好行列的座標後開始繪製 /*繪製三條橫線*/ for(int i=0;i&l

Android發自定義圓角帶點選效果的Button

public class AnimationButton extends Button { private int mBackGroundColor = Color.parseColor("#ffffff"); private int normalColo

android發自定義相機映象問題

第一次寫部落格,之前一直是沒有寫部落格的習慣。希望多多支援。 言歸正傳。 最近在做一個專案,需要自定義一個拍照功能。做完後發現,使用前置攝像頭拍照,儲存到本地以後,去相簿檢視發現儲存的是原圖。效果:拍

Android發自定義控制元件實現一個餅狀圖

實現一個如圖所示的控制元件,包括兩部分,左邊的餅狀圖和中間的兩個小方塊,及右邊的兩行文字 實現起來比較簡單,只是一些繪圖API的呼叫 核心程式碼在onDraw函式裡邊,,對靜態控制元件進行繪製即可 @Override protected void onDraw(Canv

android studio 發自定義按鍵以及基礎動畫

效果圖: 這次主要記錄如何改變button的形狀。 首先在專案app>res>drawable資料夾右鍵new新建 drawable rescource file,然後為drawable檔案命名即可。 然後在新建的drawable xml檔

移動端Tap實戰技巧總結以及Vue混合發自定義Tap

最近在忙的專案是Vue的混合開發,因互動相對複雜,所以也踩了很多坑。在此做一下總結。 1.tap事件的實際應用 在使用tap事件時,老生常談的肯定是點透問題,大多情況下,在有滑屏互動的頁面時,我們會在根節點阻止預設行為以解決事件點透的bug。 阻止預設行為有優點,但也會相對帶來一些問題。 優點: (

常用的Java發自定義工具UtilsTools

日常開發中經常會遇到一些常用頻繁的資料型別轉換、日期格式轉換、非空校驗、避免重複造輪子寫程式碼一般我們一般會封裝一個常用的Util

如何發自定義標簽

lin lns abcd tro lib case invoke java類 ext 一、簡介 原理:用戶自定義的 jsp 標記。當一個含有自定義標簽的 jsp 頁面被 jsp 引擎編譯成 servlet 時,tag 標簽被轉化成了對一個標簽處理器類的對象的操作。 標簽庫A

發自定義Mysql連接池

連接池使用第三方包 https://pypi.python.org/pypi/DBUtils tar -zxvf *.tar.gz * python3 setup.py build && python3 setup.py installimport time import py

Vue 發自定義插件學習記錄 -- 入門

dem isa 我們 isshowing 人的 暴露 doc directive 了解 首先,你需要了解插件實現的基本原理 插件基本原理: 我們都知道用Vue.use註冊插件,那你知道Vue.use(plugin) 幹了什麽? 以下是我對Vue官網的一些摘錄和個人的

利用 JSP 2 提供的 SimpleTagSupport 發自定義標籤

自定義標籤庫並不是 JSP 2 才出現的,JSP 1.1 版中已經增加了自定義標籤庫規範,自定義標籤庫是一種非常優秀的表現層元件技術。通過使用自定義標籤庫,可以在簡單的標籤中封裝複雜的功能。 為什麼要使用自定義標籤呢?主要是為了取代醜陋的 JSP 指令碼。在 HTML 頁面中插入 JSP 指令碼有

Vue 發自定義外掛學習記錄 -- 入門

首先,你需要了解外掛實現的基本原理   外掛基本原理:   我們都知道用Vue.use註冊外掛,那你知道Vue.use(plugin) 幹了什麼? 以下是我對Vue官網的一些摘錄和個人的理解   Vue.use( plu

習題 12.4 寫一個程式,定義抽象Shape,由它派生出3個派生:Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函式printArea分別輸出以上。。。

C++程式設計(第三版) 譚浩強 習題12.4 個人設計 習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三

習題 12.5 寫一個程式,定義抽象Shape,由它派生出5個派生:Circle、Square、Rectangle、Tarpezoid、Triangle。用虛擬函式分別計算幾種圖形面積,並求。。。

C++程式設計(第三版) 譚浩強 習題12.5 個人設計 習題 12.5 寫一個程式,定義抽象基類Shape,由它派生出5個派生類:Circle、Square、Rectangle、Tarpezoid、Triangle。用虛擬函式分別計算幾種圖形面積,並求它們的和

Allure報告發自定義外掛

當報告無法滿足當前專案的需求,需要自定義內容來展示在報告中,即需要開發自己的自定義外掛 最終結果 圖 :demo的結果是新增了一個My Tab 目錄欄,(demo未做有意義資料和css樣式) 1.建立一個外掛專案   基本上外掛專案包含2部分 java

基於flume1.7發自定義Sink元件-一鍵打包

概要 開始 pom檔案   ide使用idea神器,工程組織使用maven,下面是工程的pom檔案: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.a

如何基於Kubernetes發自定義的Controller_Kubernetes中文社群

繼上次分享Kubernetes原始碼編譯除錯之後,一直想寫些對scheduler,controller-manager,kubelete等元件的深入介紹,今天先介紹下Controller部分,在kubernetes內部提供了大量的controller,比如node controller,pod

寫一個程式,定義抽象Shape,由它派生出3個派生: Circle(圓形)、Rectangle(矩形)、Triangle(三角形)

 寫一個程式,定義抽象基類Shape,由它派生出3個派生類: Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函式printArea分別輸出以上三者的面積,3個圖形的資料在定義物件時給定。 #include<iostream> usi