1. 程式人生 > >【筆記】與Android選項卡一周

【筆記】與Android選項卡一周

android fragment viewpager 選項卡

果然,還是項目驅動的學習方式比較有趣呢。

這周的學習全部圍繞著選項卡,也就是tab。

用到了好多知識點,都不知道從哪裏開始啦(≧o≦*)。


選項卡的制作有很多方法。選項菜單可以用普通的TextView,也可以直接上button。我選擇的是TextView,可能更接近網頁的思路吧。

先列個清單出來:

  1. selector

  2. Fragment

  3. ViewPager

布局嘛,網上有一堆,就不提了。


1.selector

選項卡的功能,就是按不同的按鈕就能切換到不同頁面。作為反饋,按鈕總得有點變化,比如換個顏色。實現思路很簡單,點擊之後換個圖標就好了嘛。嗯~o(* ̄▽ ̄*)o,然而在onClick上折騰半天之後,我打開了百度,很快發現了selector這個標簽。


Σヽ(Д ; )居然還有這種操作!

selector用起來很簡單,寫在drawable目錄下:

for_tab1.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_news_act" android:state_selected="true" />
<item android:drawable="@drawable/ic_news" />
</selector>

ic_news和ic_news_act是通過new->Image Asset導入的圖標,自動生成各種規格,免去了手動處理圖片大小的麻煩。和.9圖應該是一樣的效果吧(.9圖?我沒做,我不懂)。


接著在主界面的TextView寫上這句話:

    android:drawableTop="@drawable/for_tab1"

完工!

改變item標簽內的屬性名(比如color),就可以改變其他效果。



2.Fragment

接著就是內容匹配。每個選項卡對應一個內容,一個內容就是一個Fragment。

android中一個頁面可以看作一個Activity,而Fragment只是”碎片“,生命周期不會長於所存在的Activity。查看配置文件AndroidManifest.xml可以發現,Fragment是沒有註冊的。

最簡單的Fragment,就是重寫onCreatView:

View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view =  inflater.inflate(R.layout., container, );
    view;

}

這時冒出了個inflater!你是誰?inflater說我只是個控制器,連接視圖和模型。啊~雖然沒有明白,但我暫時放過你,小心點inflater,我會盯著你的!



3.ViewPager

鐺~鐺~鐺~

ViewPager來了!快讓開!

誒,Fragment好像沒講完啊?沒辦法呀,Fragment沒人(activity)權啊,只能靠主子(activity)接濟過活╮(╯3╰)╭。ViewPager就是從Activity派來的走狗,啊呸,使者!

1 ViewPager可說是這個選項卡的核心。每個Fragment是選項卡顯示的內容,ViewPager像是內容的容器,同時擔任調度的工作。

布局裏的ViewPager看起來就是個普通的標簽,但是人家上頭有人!

ViewPager需要一個FragmentAdapter才能工作。

這是個超簡單的實現:

tabFragmentAdapter FragmentPagerAdapter {
    ArrayList<Fragment>  ;
    =;
    tabFragmentAdapter(FragmentManager fm, ArrayList<Fragment> list){
        (fm);
        .= list;
    }
    Fragment getItem(position) {
        .get(position);
    }

    getCount() {
        ;
    }
}

入口在主界面的Java類中:

 fa = (getSupportFragmentManager(), );
.setAdapter(fa);

fg是填入了所有Fragment的ArrayList。

getSupperFragmentManager()取到了主界面的FragmentManager。

vp是用id獲取的布局中的ViewPager。


在tab所在的主界面的Java類的onCreate()中運行,就綁定好了這些Fragment。



2Listener人呢?給tab們綁定好事件就該你上場了

tabListener View.OnClickListener {
    = ;

    tabListener(index) {
        .= index;
    }

    onClick(View v) {
        .setCurrentItem();
        clearSelect();
        .get().setSelected();
    }
}

index是區分tab的編號;

clearSelect是將tab卡片選擇狀態重置(用setSelected(false));

tabList裏裝的是作為tab按鈕的TextView;

綁定事件應該會,,,吧?

(i = ; i < .size(); i++) {
    .get(i).setOnClickListener(tabListener(i));
}

似乎很簡單,但是我不會告訴你,有一半時間花在了調空指針的BUG!


【筆記】與Android選項卡一周