前言android
列表,它做爲一種很是重要的顯示形式,不論是在web端仍是在移動平臺上,都是一種很是友好的,功能強大的展示形式。在Android中,ListView就接管了這一重任。儘管在Android5.X時代,後起之秀RecyclerListView在不少地方會取代ListView。但這依然沒法撼動ListView這個老大哥的地位。既然,ListView這麼重要,我看十分有必要對ListView的用法作一個總結。web
正文緩存
我這裏總結爲9大點,聽我細細給您道來。ide
Ⅰ、使用ViewHolder提升效率佈局
利用ViewHolder來提升ListView的執行效率是有目共睹的,ViewHolder模式是充分利用ListView的View視圖緩存機制,避免了ListView每次調用getView的時候,都須要調用getView方法,極大提高了ListView的運行效率,聽說,這種方式能提高效率50%以上。下面,我經過具體的代碼講解這種用法。ViewHolder代碼以下:spa
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; // 判斷是否緩存 if (convertView == null) { holder = new ViewHolder(); // 經過LayoutInflater實例化佈局 convertView = mInflater.inflate(R.layout.notify_item, null); holder.img = (ImageView) convertView.findViewById(R.id.imageView); holder.title = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(holder); } else { // 經過tag找到緩存的佈局 holder = (ViewHolder) convertView.getTag(); } // 設置佈局中控件要顯示的視圖 holder.img.setBackgroundResource(R.drawable.ic_launcher); holder.title.setText(mData.get(position)); return convertView; } public final class ViewHolder { public ImageView img; public TextView title; }
輕輕鬆鬆進行視圖的緩存,提升了運行效率。運行效果爲:設計
Ⅱ、設置條目間分隔線3d
在Android系統提供了divider(分割線背景值)與dividerHeight(分割線)屬性來設置兩個條目之間的分割線。例如我用下述代碼就可以起到分割相鄰條目的功能:code
android:divider="@android:color/darker_gray"
android:dividerHeight="10dp"
運行效果爲:對象
Ⅲ、隱藏ListView滾動條
當咱們上滑下拉ListView時候,在右邊的邊緣都會出現滾動條顯示您滾動的位置,當咱們把scrollbars屬性設置爲none的時候,你再滾動listview的時候,不再會出現滾動條。
Ⅳ、取消ListView的點擊效果
當您點擊ListView時候,系統會加上一個默認的點擊效果。若是您想自定義的話只須要設置listSelector="xxx"以後,這樣條目點擊之後,就能變成您想要的效果。
Ⅴ、設置ListView須要顯示第幾項
ListView是以條目的形式來顯示,默認是顯示第一個條目。當你要顯示具體的某個條目時,只須要調用setSelection(n)就能夠,這個效果是瞬時完成的。
Ⅵ、動態修改ListView
當listView的綁定的數據發生了改變的改變,咱們固然能夠經過從新設置adapter來,來從新獲取一下數據。這樣的用戶體驗很不友好啊,並且執行的效率很是的底下。其實,咱們殺雞焉用牛刀,只須要調用adapter.notifyDataChanged()就能夠,實現ListView動態更新。但這有一個前提,就是必須保證傳遞數據對象是同樣的。請看代碼:
mData.add("new");
mAdapter.notifyDataSetChanged();
這樣就能實現ListView數據動態更新。運行效果以下:
Ⅶ、遍歷ListView全部item
Android常見操做方法就是遍歷ListView中全部條目,相應代碼爲:
for (int i = 0; i < mListView.getChildCount(); i++) { View view = mListView.getChildAt(i); }
Ⅷ、處理空ListView
ListView,本質是呈現數據列表的載體,當沒有數據的展現的時候,根據良好的用戶體驗的設計規範,應該給予用戶適當的提示,Android系統提供了setEmptyView()方法,當無數據時候,給予用戶友好的提示。
Ⅸ、ListView滑動監聽
對ListView的滑動監聽,這是一個重要的技巧,看來咱們有必要在這裏下一番寒徹骨 。咱們在這裏主要是兩個事件監聽——OnTouchListener事件與OnScrollListener事件。
①、OnTouchListener事件
OnTouchListener是View自帶的監聽事件,咱們通常監聽ACTION_DOWN(按下狀態),ACTION_UP(擡起狀態)與ACTION_MOVE(移動狀態)三個狀態的座標,就可以判斷ListView是上滑仍是下滑。相應事件以下:
View.OnTouchListener myTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: break; } return false; } };
②、OnScrollListener事件
OnScrollListener事件是ListView自帶的事件,他封裝了不少與ListView相關信息,用起來十分靈活。咱們來看看它的使用方法。代碼以下:
mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState){ case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: break; case AbsListView.OnScrollListener.SCROLL_STATE_FLING: break; case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });
咱們觀察這個OnScrollListener事件中有兩個回調方法——OnScrollStateChanged()和OnScroll()。
咱們來看看第一個方法OnScrollStateChanged(),這個方法根據scrollState(滾動狀態)來肯定其回調的次數。其中ScrollState有三種模式:
OnScrollListener.SCROLL_STATE_IDLE——滾動中止時。
OnScrollListener.SCROLL_STATE_TOUCH_SCROLL——正在滾動時。
OnScrollListener.SCROLL_STATE_FLING——手指用力滾動時,即用戶離開之後,即ListView因爲慣性會繼續滾動一段時間。
當用戶用力滾動時,這個方法會回調3次,不然的話,只會回調2次。主要差異在於,是否觸發了這個用力滾動事件。咱們對這個方法的通常的作法在於,設置一些標誌Flag,來處理不一樣的狀態,供其餘方法處理。
下面再來看看onScroll()這個回調方法,他在ListView滾動時一直回調,咱們要了解其餘三個參數
firstVisibleItem——當前能看見的第一個Item的ID。
visibleItemCount——當前能看見的Item的總數。
totalItemCount——整個ListView的Item條目的數目。
須要指出的是,當前能看見的Item,包括沒有顯示完整的Item。經過這幾個參數,能夠作一些有用的判斷,便可以判斷這個ListView是否滾動到最後一行。判斷思路在於當前可視的Item的ID加上當前可視Item的和是否等於Item的總數.也能夠判斷滾動方向,判斷第一個Item的ID是否大於上次第一個可見ItemID。
總結
ListView使用方法,就是上面總結"九宗罪",但願給你們有幫助。本人才疏學淺,但願你們吐槽。