導航:首頁 > 版本升級 > recyclerview版本支持

recyclerview版本支持

發布時間:2025-10-19 21:30:55

A. Android控制項RecyclerView和ListView的異同

Android是一個不斷進化的平台,Android
5.0的v7版本支持包中引入了新的RecyclerView控制項,正如官方文檔所言,RecyclerView是ListView的豪華增強版。它主要
包含以下幾處新的特性,如ViewHolder,ItemDecorator,LayoutManager,SmothScroller以及增加或刪除
item時item動畫等。官方推薦我們採用RecyclerView來取代ListView。

ViewHolder

ViewHolder是用來保存視圖引用的類,無論是ListView亦或是RecyclerView。只不過在ListView
中,ViewHolder需要自己來定義,且這只是一種推薦的使用方式,不使用當然也可以,這不是必須的。只不過不使用ViewHolder的
話,ListView每次getView的時候都會調用findViewById(int),這將導致ListView性能展示遲緩。而在
RecyclerView中使用 RecyclerView.ViewHolder 則變成了必須,盡管實現起來稍顯復雜,但它卻解決了ListView面臨的上述不使用自定義ViewHolder時所面臨的問題。 RecyclerView.ViewHolder 被BaseAdapter使用,以將posiiton綁定到上面(可以通過API查看 RecyclerView.ViewHolder#getPosition() 方法)。

LayoutManager

我們知道ListView只能在垂直方向上滾動,Android
API沒有提供ListView在水平方向上面滾動的支持。或許有多種方式實現水平滑動,但是請想念我,ListView並不是設計來做這件事情的。但是
RecyclerView相較於ListView,在滾動上面的功能擴展了許多。它可以支持多種類型列表的展示要求,主要如下:

LinearLayoutManager ,可以支持水平和豎直方向上滾動的列表。

StaggeredGridLayoutManager ,可以支持交叉網格風格的列表,類似於瀑布流或者Pinterest。

GridLayoutManager ,支持網格展示,可以水平或者豎直滾動,如展示圖片的畫廊。

ItemAnimator

列表動畫是一個全新的、擁有無限可能的維度。起初的Android API中,刪除或添加item時,item是無法產生動畫效果的。後面隨著Android的進化,Google的Chat Hasse推薦使用 ViewPropertyAnimator 屬性動畫來實現上述需求。

相比較於ListView, RecyclerView.ItemAnimator 則被提供用於在RecyclerView添加、刪除或移動item時處理動畫效果。同時,如果你比較懶,不想自定義ItemAnimator,你還可以使用 DefaultItemAnimator 。

Adapter

ListView的Adapter中,getView是最重要的方法,它將視圖跟position綁定起來,是所有神奇的事情發生的地方。同時我們也能夠
通過registerDataObserver在Adapter中注冊一個觀察者。RecyclerView也有這個特性, RecyclerView.AdapterDataObserver

就是這個觀察者。ListView有三個Adapter的默認實現,分別是ArrayAdapter、CursorAdapter和
SimpleCursorAdapter。然而,RecyclerView的Adapter則擁有除了內置的內DB游標和ArrayList的支持之外的
所有功能。 RecyclerView.Adapter 的實現的,我們必須採取措施將數據提供給Adapter,正如BaseAdapter對ListView所做的那樣。

ItemDecoration

在ListView中如果我們想要在item之間添加間隔符,我們只需要在布局文件中對ListView添加如下屬性即可:

1 android:divider="@android:color/transparent"
2 android:dividerHeight="5dp"

View Code

有趣的是,RecyclerView在默認情況下並不在item之間展示間隔符。盡管Google的傢伙有意地將這個問題遺留給我們去自定義間隔符,但這
的確增加了開發人員的負擔。如果你想要添加間隔符,你必須使用RecyclerView.ItemDecoration類來實現。或者,你可以應用官方示
例中的 DividerItemDecoration.java 文件。

OnItemTouchListener

ListView通過AdapterView.OnItemClickListener介面來探測點擊事件。而RecyclerView則通過
RecyclerView.OnItemTouchListener介面來探測觸摸事件。它雖然增加了實現的難度,但是卻給予開發人員攔截觸摸事件更多的
控制許可權。

Others

ListView可以設置選擇模式,並添加MultiChoiceModeListener,如下所示:

1 listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
2 listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
3 public boolean onCreateActionMode(ActionMode mode, Menu menu) { ... }
4 public void onItemCheckedStateChanged(ActionMode mode, int position,
5 long id, boolean checked) { ... }
6 public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
7 switch (item.getItemId()) {
8 case R.id.menu_item_delete_crime:
9 CrimeAdapter adapter = (CrimeAdapter)getListAdapter();
10 CrimeLab crimeLab = CrimeLab.get(getActivity());
11 for (int i = adapter.getCount() - 1; i >= 0; i--) {
12 if (getListView().isItemChecked(i)) {
13 crimeLab.deleteCrime(adapter.getItem(i));
14 }
15 }
16 mode.finish();
17 adapter.notifyDataSetChanged();
18 return true;
19 default:
20 return false;
21 }
22 public boolean onPrepareActionMode(ActionMode mode, Menu menu) { ... }
23 public void onDestroyActionMode(ActionMode mode) { ... }
24 });

View Code

而RecyclerView則沒有此功能。

總之,通過比較我們可以發現,RecyclerView充滿了大量的自定義功能,它可以用於實現復雜的列表或網格,但實現起來稍顯得復雜。

閱讀全文

與recyclerview版本支持相關的資料

熱點內容
U盤文件夾應用程序 瀏覽:470
圖書館文獻資料庫有哪些 瀏覽:362
壓縮文件損壞的頭 瀏覽:817
微信公眾號創建好文件怎麼發送 瀏覽:858
xlrd如何將數據寫入excel中 瀏覽:200
微信號貨源宣傳圖 瀏覽:562
recyclerview版本支持 瀏覽:98
傳輸文件出錯然後u盤讀取不了 瀏覽:641
編程裡面的英文去哪裡學方便 瀏覽:668
90版本天帝tp加點 瀏覽:117
vivox6和蘋果6 瀏覽:611
編程苦惱怎麼辦 瀏覽:140
vuejsref動態改變 瀏覽:171
哪些軟體可用於文件解壓 瀏覽:701
農行u盾原始密碼 瀏覽:371
xp如何弄出一個無線網路連接 瀏覽:569
word插入pdf只顯示文件名稱和圖標 瀏覽:150
我想編程一個小軟體怎麼弄 瀏覽:168
如何優化文件讀取數據java 瀏覽:262
java敏捷式開發 瀏覽:800

友情鏈接