pinned-section-listview

特點(diǎn):讓ListView的指定條目在滑動(dòng)到頂部的時(shí)候固定在頭部扛邑,

github地址:https://github.com/beworker/pinned-section-listview

原理:定義接口PinnedSectionListAdapter繼承ListAdapter席纽,并增加isItemViewTypePinned方法來判斷當(dāng)前是否是Section(即固定的選項(xiàng))勾哩;
我們所寫的adapter要實(shí)現(xiàn)PinnedSectionListAdapter,并且按照自己的邏輯實(shí)現(xiàn)isItemViewTypePinned方法;

定義PinnedSectionListView繼承自ListView,設(shè)置onScrollListener,在onScroll方法中去判斷當(dāng)前firstVisiableItem是否是Section,如果是則通過dispatchDraw方法在頂部位置繪制當(dāng)前Section的View缤至,正好覆蓋著firstVisiableItem的View,看起來就像是固定在頭部一樣;

用法

  • 只需將自己的Adapter實(shí)現(xiàn)PinnedSectionListAdapter俊性,并實(shí)現(xiàn)isItemViewTypePinned方法螃壤,如下:
class MyAdapter extends BaseAdapter implements PinnedSectionListAdapter{
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public Object getItem(int position) {
        return null;
    }
    @Override
    public long getItemId(int position) {
        return 0;
    }
    //定義條目類型
    private final int ITEM_NORMAL = 0;//普通數(shù)據(jù)條目
    private final int ITEM_SECTION = 1;//需要固定的Section條目
    /**
     * 總共2種條目類型,一種是分類條目倡怎,一種是普通的數(shù)據(jù)條目
     */
    @Override
    public int getViewTypeCount() {
        return 2;
    }
    @Override
    public int getItemViewType(int position) {
        BaseBean baseBean = list.get(position);
        if(baseBean instanceof Person){
            return ITEM_NORMAL;
        }else {
            return ITEM_SECTION;
        }
    }
    /**
     * 此處借助于itemViewType來判斷是否是需要固定的條目;
     * 所以必須實(shí)現(xiàn)另外2個(gè)方法迅耘,就是getViewTypeCount和getItemViewType,
     * 只有viewType是ITEM_SCTION的才需要固定
     */
    @Override
    public boolean isItemViewTypePinned(int viewType) {
        return viewType==ITEM_SECTION;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView textView = new TextView(MainActivity.this);
        textView.setTextColor(Color.DKGRAY);
        textView.setPadding(15, 15, 15, 15);

        //根據(jù)條目類型來返回條目View,并且設(shè)置對(duì)應(yīng)的數(shù)據(jù)
        int itemViewType = getItemViewType(position);
        switch (itemViewType) {
        case ITEM_NORMAL:
            textView.setBackgroundColor(Color.WHITE);
            Person person = (Person) list.get(position);
            textView.setText(person.getName());
            break;
        case ITEM_SECTION:
            textView.setBackgroundColor(Color.parseColor("#ff99cc00"));
            SectionItem sectionItem = (SectionItem) list.get(position);
            textView.setText(sectionItem.getSectionName());
            break;
        }
        return textView;
    } 
}

  • 數(shù)據(jù)的準(zhǔn)備如下,將列表數(shù)據(jù)和分類數(shù)據(jù)都添加到同一個(gè)集合:
// 準(zhǔn)備數(shù)據(jù)
// 添加小學(xué)生分類數(shù)據(jù)
list.add(new StuCategory("小學(xué)生"));
// 初始化小學(xué)生數(shù)據(jù)
for (int i = 0; i < 12; i++) {
    list.add(new Stu("小學(xué)生 - " + i));
}

// 添加初中生分類數(shù)據(jù)
list.add(new StuCategory("初中生"));
// 初始化初中學(xué)生數(shù)據(jù)
for (int i = 0; i < 12; i++) {
    list.add(new Stu("初中生 - " + i));
}

// 添加高中生分類數(shù)據(jù)
list.add(new StuCategory("高中生"));
// 初始化高中學(xué)生數(shù)據(jù)
for (int i = 0; i < 12; i++) {
    list.add(new Stu("高中生 - " + i));
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末监署,一起剝皮案震驚了整個(gè)濱河市颤专,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钠乏,老刑警劉巖栖秕,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晓避,居然都是意外死亡簇捍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門俏拱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暑塑,“玉大人,你說我怎么就攤上這事锅必∈赂瘢” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵搞隐,是天一觀的道長分蓖。 經(jīng)常有香客問我,道長尔许,這世上最難降的妖魔是什么么鹤? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮味廊,結(jié)果婚禮上蒸甜,老公的妹妹穿的比我還像新娘。我一直安慰自己余佛,他們只是感情好柠新,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辉巡,像睡著了一般恨憎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天憔恳,我揣著相機(jī)與錄音瓤荔,去河邊找鬼。 笑死钥组,一個(gè)胖子當(dāng)著我的面吹牛输硝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播程梦,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼点把,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了屿附?” 一聲冷哼從身側(cè)響起郎逃,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挺份,沒想到半個(gè)月后褒翰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡压恒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年影暴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片探赫。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡型宙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伦吠,到底是詐尸還是另有隱情妆兑,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布毛仪,位于F島的核電站搁嗓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏箱靴。R本人自食惡果不足惜腺逛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衡怀。 院中可真熱鬧棍矛,春花似錦、人聲如沸抛杨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怖现。三九已至茁帽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潘拨。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工吊输, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人战秋。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓璧亚,卻偏偏與公主長得像讨韭,于是被迫代替她去往敵國和親脂信。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,307評(píng)論 25 707
  • 埃爾溫·約翰尼斯·尤根·隆美爾透硝,納粹德國元帥狰闪,第二次世界大戰(zhàn)的縱火犯,希特勒麾下得力干將濒生,與古德里安埋泵、...
    郝吉慶閱讀 654評(píng)論 0 3
  • 奔赴前世一個(gè)約定 行于浪里 打撈一湖江南煙雨 被癡情包裹的誓言 就沉眠在這一線蘇堤 經(jīng)由靈水的洗禮 風(fēng) 卷起雪染的...
    寶天曼風(fēng)景閱讀 887評(píng)論 15 22
  • 從前覺得自己絕對(duì)不會(huì)丟失自己,為了一個(gè)男人罪治。 從醫(yī)院看到他扶著那個(gè)漂亮的女生丽声,我怔住了。那種小心翼翼的擔(dān)心的...
    阿四啊阿四閱讀 282評(píng)論 0 0
  • 一個(gè)人如何對(duì)待他的時(shí)間觉义,決定了他可以成為什么樣的人雁社。 《精進(jìn)》這本書已經(jīng)存在在iPad上兩三個(gè)周了,趁著在高鐵上的...
    isabellaLilove閱讀 471評(píng)論 0 0