安卓中LIstFragment的使用

fragment已經(jīng)是目前應(yīng)用使用的主流了诫钓,今天來(lái)看看怎么來(lái)fragment中顯示listview——即ListFragment的使用

1逢防、創(chuàng)建CrimeListFragment繼承于ListFragment

    @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}```
不同于Fragment托管到activity画机,ListFragment不用調(diào)用onCreateView(...)方法來(lái)生成布局帅腌,因?yàn)樵擃怢istFragment自身已經(jīng)生成一個(gè)全屏的ListView布局。 
###2功茴、創(chuàng)建一個(gè)Crime實(shí)例類礁凡,可以用于在list中顯示出來(lái)
```public class Crime {
    private String mTitle;
    public String getTitle() {
        return mTitle;
    }
     public String toString() {
    return mTitle;
     }
    public void setTitle(String title) {
        mTitle = title;
    }
}```
###3高氮、再新建一個(gè)CrimeLab類慧妄,這個(gè)類用來(lái)生成ArrayList<Crime>,即把Crime類中的對(duì)象存儲(chǔ)到這個(gè)List集合中
```public class CrimeLab {
    private ArrayList<Crime> mCrimes;//用來(lái)保存Crime對(duì)象的ArrayList
    private static CrimeLab sCrimeLab;
    private Context mAppContext;
    //構(gòu)造方法
    private CrimeLab(Context appContext) {
        mAppContext = appContext;
        mCrimes = new ArrayList<Crime>();//用來(lái)保存Crime對(duì)象的ArrayList
        //創(chuàng)建100個(gè)Crime對(duì)象并儲(chǔ)存進(jìn)List中
        for (int i = 0; i < 100; i++) {
            Crime c = new Crime();
            c.setTitle("Crime #" + i);
            mCrimes.add(c);//ArrayList中的自帶方法剪芍,添加對(duì)象進(jìn)入list中
        }
    }
    //單例模式中獲取單例的構(gòu)造方法
    public static CrimeLab get(Context c) {
        if (sCrimeLab == null) {
            sCrimeLab = new CrimeLab(c.getApplicationContext());//變量前的s前綴塞淹,是android開(kāi)發(fā)的命名約定,表示該變量是一個(gè)靜態(tài)變量
        }
        return sCrimeLab;
    }
    //調(diào)用該方法返回ArrayList數(shù)組
    public ArrayList<Crime> getCrimes() {
        return mCrimes;
    }
}```
關(guān)于 CrimeLab get(Context c)構(gòu)造方法罪裹,這個(gè)是使用了單例模式中的懶漢模式:JAVA特許的單例類饱普,該類僅允許創(chuàng)建一個(gè)實(shí)例。應(yīng)用在內(nèi)存存在多久状共,單例就能存在多久套耕,因此把對(duì)象列表存放在單例中可以保該對(duì)向的數(shù)據(jù)一直存在。單例常用于工具類峡继,比如我有一個(gè)工具箱窗體 每點(diǎn)擊一次按鈕 都會(huì)實(shí)例化一個(gè)工具箱箍铲,用戶點(diǎn)擊多次,就會(huì)彈出多次工具箱窗口鬓椭,所以在這里,我們就需要工具箱這個(gè)類只有一個(gè)實(shí)例关划,就要用到我們的單例模式了小染。要?jiǎng)?chuàng)建單例,需要?jiǎng)?chuàng)建一個(gè)帶有私有構(gòu)造方法及get()方法的類贮折,其中g(shù)et()返回實(shí)例裤翩。
###4、在CrimeListFragment中創(chuàng)建一個(gè)內(nèi)部類CrimeAdapter,讓這個(gè)類繼承于ArrayAdapter调榄,這樣方便我們進(jìn)行列表的定制
`public class CrimeListFragment extends ListFragment {
     private ArrayList<Crime> mCrimes;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
     private class CrimeAdapter extends ArrayAdapter<Crime> {
         public CrimeAdapter(ArrayList<Crime> crimes) {
             super(getActivity(), android.R.layout.simple_list_item_1, crimes);
         }
}```
###5踊赠、之后重寫CrimeAdapter中的getView()方法,用來(lái)對(duì)list列表的定制
```private class CrimeAdapter extends ArrayAdapter<Crime> {
        public CrimeAdapter(ArrayList<Crime> crimes) {
            super(getActivity(), android.R.layout.simple_list_item_1, crimes);
        }
   @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                if (null == convertView) {
                    convertView = getActivity().getLayoutInflater()
                    .inflate(R.layout.list_item_crime, null);
                    }
                Crime c = getItem(position);
                TextView titleTextView =
                (TextView)convertView.findViewById(R.id.crime_list_item_titleTextView);
            titleTextView.setText(c.getTitle());
            return convertView;
        }
}```
在這里我們使用convertView來(lái)加載我們自定義的List布局**R.layout.list_item_crime**每庆,用convertView的一個(gè)好處是可以循環(huán)利用View筐带,對(duì)list的加載有明顯的優(yōu)化作用。
同時(shí)我們需要再新建**R.layout.list_item_crime**布局文件
`<?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">
  <TextView android:id="@+id/crime_list_item_titleTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textStyle="bold"
    android:paddingLeft="4dp"
    android:paddingRight="4dp"
    android:text="Crime title" />
  <TextView android:id="@+id/crime_list_item_dateTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/crime_list_item_titleTextView"
    android:paddingLeft="4dp"
    android:paddingRight="4dp"
    android:paddingTop="4dp"
    android:text="Crime date" />
</RelativeLayout>`  
在這個(gè)布局文件里我們加載兩個(gè)textview控件缤灵,用來(lái)顯示標(biāo)題伦籍。完成后便在onCreate中new出adapter適配器的實(shí)例,并和list綁定
`private static final String TAG = "CrimeListFragment";
  private ArrayList<Crime> mCrimes;
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      mCrimes = CrimeLab.get(getActivity()).getCrimes();//創(chuàng)建出Crime對(duì)象的實(shí)例數(shù)組
      CrimeAdapter adapter = new CrimeAdapter(mCrimes);//new出適配器的實(shí)例
      setListAdapter(adapter);//和List綁定
  }`
一切都完成后我們可以來(lái)運(yùn)行一下

![運(yùn)行后的情況](http://upload-images.jianshu.io/upload_images/2528012-99f5fcceb576e70f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
可以看到listView已經(jīng)能顯示出來(lái)了腮出。接下來(lái)我們來(lái)實(shí)現(xiàn)list每個(gè)項(xiàng)目的點(diǎn)擊事件
###6帖鸦、覆蓋public void onListItemClick(ListView l,view v,int position, long id)
ListFragment中提供了一個(gè)便利的方法public void onListItemClick(ListView l,view v,int position, long id),只要覆蓋這個(gè)方法就可以實(shí)現(xiàn)點(diǎn)擊事件
`@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    Crime c = (Crime)(getListAdapter()).getItem(position);
    //填入想要實(shí)現(xiàn)的邏輯
}`
其中g(shù)etListAdapter是LFment的便利方法胚嘲,可以直接返回視圖上的adapter作儿,在調(diào)用getItem,獲取當(dāng)前點(diǎn)擊的Item的位置,并把他實(shí)例成需要的對(duì)象馋劈。
這樣我們就實(shí)現(xiàn)了listfragment來(lái)顯示列表攻锰!
最后源碼的下載:http://download.csdn.net/detail/owensteven/9587945
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晾嘶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子口注,更是在濱河造成了極大的恐慌变擒,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寝志,死亡現(xiàn)場(chǎng)離奇詭異娇斑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)材部,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門毫缆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人乐导,你說(shuō)我怎么就攤上這事苦丁。” “怎么了物臂?”我有些...
    開(kāi)封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵旺拉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我棵磷,道長(zhǎng)蛾狗,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任仪媒,我火速辦了婚禮沉桌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘算吩。我一直安慰自己留凭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布偎巢。 她就那樣靜靜地躺著蔼夜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪压昼。 梳的紋絲不亂的頭發(fā)上挎扰,一...
    開(kāi)封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音巢音,去河邊找鬼遵倦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛官撼,可吹牛的內(nèi)容都是我干的梧躺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼掠哥!你這毒婦竟也來(lái)了巩踏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤续搀,失蹤者是張志新(化名)和其女友劉穎塞琼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禁舷,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彪杉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牵咙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片派近。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖洁桌,靈堂內(nèi)的尸體忽然破棺而出渴丸,到底是詐尸還是另有隱情,我是刑警寧澤另凌,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布谱轨,位于F島的核電站,受9級(jí)特大地震影響吠谢,放射性物質(zhì)發(fā)生泄漏土童。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一囊卜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧错沃,春花似錦栅组、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至醒叁,卻和暖如春司浪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背把沼。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工啊易, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饮睬。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓租谈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捆愁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子割去,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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