當前位置:首頁 » 安卓系統 » androidlistview分類

androidlistview分類

發布時間: 2022-08-29 13:53:31

『壹』 Android控制項RecyclerView和ListView的異同

RecyclerView是一種新的視圖組,目標是為任何基於適配器的視圖提供相似的渲染方式。它被作為ListView和GridView控制項的繼承者,在最新的support-V7版本中提供支持。
在開發RecyclerView時充分考慮了擴展性,因此用它可以創建想到的任何種類的的布局。但在使用上也稍微有些不便。這就是Android——要完成一件事情總不是那麼容易。
如果使用RecyclerView,你需要了解以下三個元素:
RecyclerView.Adapter
LayoutManager
ItemAnimator

RecyclerView.Adapter
RecyclerView包含了一種新型適配器。它與現在使用的適配器類似,但也稍有不同,例如它需要使用ViewHolder。使用時需要重寫兩個主要方法:一個用來展現視圖和它的持有者,而另一個用來把數據綁定到視圖上。這么做的好處是,第一種方法只有當我們真正需要創建一個新視圖時才被調用,不需要檢查它是否已經被回收。

LayoutManager
這個類決定視圖被放在畫面中哪個位置,但這只是它的眾多職責之一。它可以管理滾動和循環利用。
LayoutManager只有一個叫做LinearLayoutManager的實現類,它有1500多行代碼。但從這一點就可以看出它有多復雜。管理器可以模擬列表視圖(包括橫向和縱向),但沒有頁眉和頁尾。
為LayoutManager編寫子類不太適合新手,我們需要依靠社區來發掘RecyclerView的全部潛力。與這個例子一起,在短時間內我會上傳一個GridView控制項的實現。
我認為這背後的關鍵是要仿照LinearLayoutManager的代碼創建一個BaseLayoutManager,並且基於此進行擴展。或許support-v7的最終版本會提供更多、更好的實現。

ItemAnimator
ItemAnimator會根據適配器上收到的通知動畫顯示視圖組的修改。基本上,它會自動顯示添加和移除條目動畫。這也不是一個簡單的類,但我們發現DefaultItemAnimator已經可以運行得很好了。

『貳』 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充滿了大量的自定義功能,它可以用於實現復雜的列表或網格,但實現起來稍顯得復雜。

『叄』 android ListView用法和屬性

ListView是一個用來縱向顯示條目的視圖,這些條目內容來自於與該ListView相關聯的ListAdapter.
android:divider//在列表條目之間顯示的drawable或color
android:dividerHeight//用來指定divider的高度
android:entries//構成ListView的數組資源的引用。對於某些固定的資源,這個屬性提供了比在程序中添加資源更加簡便的方式
android:footerDividersEnabled//當設為false時,ListView將不會在各個footer之間繪制divider.默認為true。
android:headerDividersEnabled//當設為false時,ListView將不會在各個header之間繪制divider.默認為true
android:cacheColorHint// 表明這個列表的背景始終以單一、固定的顏色繪制,可以優化繪制過程。
android:choiceMode//為視圖指定選擇的行為。可選的類型有:none、singleChoice、multipleChoice、multipleChoiceModal。
android:drawSelectorOnTop// 若設為true,選擇器將繪制在選中條目的上層。默認為false。
android:fastScrollEnabled// 設置是否允許使用快速滾動滑塊。
android:addStatesFromChildren// 設置這個ViewGroup的drawable狀態是否包括子View的狀態。若設為true,當子View如EditText或Button獲得焦點時,整個ViewGroup也會獲得焦點。
android:alwaysDrawnWithCache// 設置ViewGroup在繪制子View時是否一直使用繪圖緩存。默認為true。
android:animationCache// 設置布局在繪制動畫效果時是否為其子View創建繪圖緩存。若設為true,將會消耗更多的內存,要求持續時間更久的初始化過程,但表現更好。默認為true。
android:clipChildren// 設置子View是否受限於在自己的邊界內繪制。若設為false,當子View所佔用的空間大於邊界時可以繪制在邊界外。默認為true。
android:clipToPadding//定義布局間是否有間距。默認為true。
android:descendantFocusability// 定義當尋找一個焦點View的時候,ViewGroup與其子View之間的關系。可選項為:
//(1)beforeDescendants ViewGroup會比其子View更先獲得焦點;
//(2)afterDescendants 只有當無子View想要獲取焦點時,ViewGroup才會獲取焦點;
//(3)blockDescendants ViewGroup會阻止子View獲取焦點
android:layoutAnimation//定義當ViewGroup第一次展開時的動畫效果,也可人為地在第一次展開後調用。
android:persistentDrawingCache// 定義繪圖緩存的持久性。有如下可選項:
//(1)none 當使用過後不保留繪圖緩存
//(2)animation 在layout animation之後保留繪圖緩存
//(3)scrolling 在Scroll操作後保留繪圖緩存
//(4)all always保留繪圖緩存
android:listSelector// 設置選中項顯示的可繪制對象,可以是圖片或者顏色屬性。
android:scrollingCache// 設置在滾動時是否使用繪制緩存。若設為true,則將使滾動表現更快速,但會佔用更內存。默認為true。
android:smoothScrollbar// 為真時,列表會使用更精確的基於條目在屏幕上的可見像素高度的計算方法。默認該屬性為真,如果你的適配器需要繪制可變高的條目,他應該設為假。當該屬性為真時,你在適配器在顯示變高條目時,滾動條的把手會在滾動的過程中改變大小。當設為假時,列表只使用適配器中的條目數和屏幕上的可見條目來決定滾動條的屬性。
android:stackFromBottom// 設置GridView和ListView是否將內容從底部開始顯示。
android:textFilterEnabled// 當設為真時,列表會將結果過濾為用戶類型。前提是這個列表的Adapter必須支持Filterable介面。
android:transcriptMode//設置列表的transcriptMode.有如下選項可選:
//(1)disabled 禁用TranscriptMode,也是默認值;
//(2)normal 當新條目添加進列表中並且已經准備好顯示的時候,列表會自動滑動到底部以顯示最新條目;
//(3)alwaysScroll 列表會自動滑動到底部,無論新條目是否已經准備好顯示.
目前推薦用的是 RecycleView

『肆』 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。
GridLaoutManager ,支持網格展示,可以水平或者豎直滾動,如展示圖片的畫廊。
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所做的那樣。

『伍』 android listview怎麼用

Android listview與adapter用法
listview與adapter用法

一個ListView通常有兩個職責。
(1)將數據填充到布局。
(2)處理用戶的選擇點擊等操作。
第一點很好理解,ListView就是實現這個功能的。第二點也不難做到,在後面的學習中讀者會發現,這非常簡單。
一個ListView的創建需要3個元素。
(1)ListView中的每一列的View。
(2)填入View的數據或者圖片等。
(3)連接數據與ListView的適配器。
也就是說,要使用ListView,首先要了解什麼是適配器。適配器是一個連接數據和AdapterView(ListView就是一個典型的AdapterView,後面還會學習其他的)的橋梁,通過它能有效地實現數據與AdapterView的分離設置,使AdapterView與數據的綁定更加簡便,修改更加方便
Android中提供了很多的Adapter,表4-5列出了常用的幾個。
表4-5 常用適配器

Adapter

含義

ArrayAdapter<T>

用來綁定一個數組,支持泛型操作

SimpleAdapter

用來綁定在xml中定義的控制項對應的數據

SimpleCursorAdapter

用來綁定游標得到的數據

BaseAdapter

通用的基礎適配器

其實適配器還有很多,要注意的是,各種Adapter只不過是轉換的方式和能力不一樣而已。下面就通過使用不同的Adapter來為ListView綁定數據(SimpleCursorAdapter暫且不講,後面講SQLite時會介紹)。
4.12.1 ListView使用ArrayAdapter
用ArrayAdapter可以實現簡單的ListView的數據綁定。默認情況下,ArrayAdapter綁定每個對象的toString值到layout中預先定義的TextView控制項上。ArrayAdapter的使用非常簡單。
實例:
工程目錄:EX_04_12
在布局文件中加入一個ListView控制項。

<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="
http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
android:layout_height="fill_parent"> <!-- 添加一個ListView控制項 --> <ListView
android:id="@+id/lv" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
</LinearLayout>

然後在Activity中初始化。

publicclass MyListView extends Activity {

privatestaticfinal String[] strs = new String[] {
"first", "second", "third", "fourth", "fifth"
};//定義一個String數組用來顯示ListView的內容private ListView lv;/** Called when the activity is first created. */
@Override
publicvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.main);

lv = (ListView) findViewById(R.id.lv);//得到ListView對象的引用 /*為ListView設置Adapter來綁定數據*/
lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, strs));

}
}

▲圖4-29 ListView使用ArrayAdapter運行效果
代碼非常的簡單,運行效果如圖4-29所示。

分析一下使用的步驟。
(1)定義一個數組來存放ListView中item的內容。
(2)通過實現ArrayAdapter的構造函數來創建一個ArrayAdapter的對象。
(3)通過ListView的setAdapter()方法綁定ArrayAdapter。
其中第二步有必要說一下的是,ArrayAdapter有多個構造函數,例子中實現的是最常用的一種。第一個參數為上下文,第二個參數為一個包含TextView,用來填充ListView的每一行的布局資源ID。第三個參數為ListView的內容。其中第二個參數可以自定義一個layout,但是這個layout必須要有TextView控制項。通常我們使用Android提供的資源,除了例子中所用的,常用的還有如下幾種,可實現帶RadioButton和CheckBox的ListView。
(1)通過指定android.R.layout.simple_list_item_checked這個資源,實現帶選擇框的ListView。需要用setChoiceMode()方法設定選擇為多選還是單選,否則將不能實現選擇效果,運行效果如圖4-30所示。
實現代碼如下:
lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, strs));
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

(2)通過指定android.R.layout.simple_list_item_multiple_choice這個資源實現帶CheckBox的ListView。同樣的,需要用setChoiceMode()方法來設置單選或者多選,運行效果如圖4-31所示。
實現代碼如下:
lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice, strs));
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

(3)通過指定android.R.layout.simple_list_item_single_choice這個資源實現帶RadioButton的ListView。這里要注意的是,這里並不是指定了單選。是多選還是單選要通過setChoiceMode()方法來指定,運行效果如圖4-32所示。
實現代碼如下:

lv.setAdapter(newArrayAdapter<String>(this,

android.R.layout.simple_list_item_single_choice,strs));

lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

在前面講到過,ListView的職責除了填充數據外,還要處理用戶的操作。通過如下的代碼就可以為ListView綁定一個點擊監聽器,點擊後在標題欄顯示點擊的行數。

lv.setOnItemClickListener(new OnItemClickListener() {

@Override
publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
//點擊後在標題上顯示點擊了第幾行 setTitle("你點擊了第"+arg2+"行");
}
});

4.12.2 ListView使用SimpleAdapter
很多時候需要在列表中展示一些除了文字以外的東西,比如圖片等。這時候可以使用SimpleAdapter。SimpleAdapter的使用也非常簡單,同時它的功能也非常強大。可以通過它自定義ListView中的item的內容,比如圖片、多選框等。看一個例子,實現一個每一行都有一個ImageView和TextView的ListView。先看一下運行效果,如圖4-34所示。

▲圖4-34 帶圖標的ListView

首先在布局文件中增加一個ListView控制項。
還需要定義一個ListView中每一行的布局,用RelativeLayout來實現一個帶兩行字和一個圖片的布局。
item.xml:

<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent">
<ImageViewandroid:layout_alignParentRight="true" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/ItemImage"/>
<TextViewandroid:id="@+id/ItemTitle" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:textSize="20sp"/>
<TextViewandroid:id="@+id/ItemText" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_below="@+id/ItemTitle"/> </RelativeLayout>

配置完畢,就可以在Java代碼中為ListView綁定數據。

publicclass MyListViewSimple extends Activity {

private ListView lv;
/** Called when the activity is first created. */ @Override
publicvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.main);

lv = (ListView) findViewById(R.id.lv);/*定義一個動態數組*/
ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();/*在數組中存放數據*/
for(int i=0;i<10;i++)
{
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("ItemImage", R.drawable.icon);//加入圖片 map.put("ItemTitle", "第"+i+"行");
map.put("ItemText", "這是第"+i+"行");
listItem.add(map);
}

SimpleAdapter mSimpleAdapter = new SimpleAdapter(this,listItem,//需要綁定的數據
R.layout.item,//每一行的布局//動態數組中的數據源的鍵對應到定義布局的View中new String[] {"ItemImage"
,"ItemTitle", "ItemText"},
newint[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText}
);

lv.setAdapter(mSimpleAdapter);//為ListView綁定適配器 lv.setOnItemClickListener(new
OnItemClickListener() {

@Override
publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
setTitle("你點擊了第"+arg2+"行");//設置標題欄顯示點擊的行
}
});
}
}

使用simpleAdapter的數據一般都是用HashMap構成的列表,列表的每一節對應ListView的每一行。通過SimpleAdapter的構造函數,將HashMap的每個鍵的數據映射到布局文件中對應控制項上。這個布局文件一般根據自己的需要來自己定義。梳理一下使用SimpleAdapter的步驟。
(1)根據需要定義ListView每行所實現的布局。
(2)定義一個HashMap構成的列表,將數據以鍵值對的方式存放在裡面。
(3)構造SimpleAdapter對象。
(4)將LsitView綁定到SimpleAdapter上。
4.12.3 ListView使用BaseAdapter與ListView的優化
在ListView的使用中,有時候還需要在裡面加入按鈕等控制項,實現單獨的操作。也就是說,這個ListView不再只是展示數據,也不僅僅是這一行要來處理用戶的操作,而是裡面的控制項要獲得用戶的焦點。讀者可以試試用SimpleAdapter添加一個按鈕到ListView的條目中,會發現可以添加,但是卻無法獲得焦點,點擊操作被ListView的Item所覆蓋。這時候最方便的方法就是使用靈活的適配器BaseAdapter了。

使用simpleAdapter的數據一般都是用HashMap構成的列表,列表的每一節對應ListView的每一行。通過SimpleAdapter的構造函數,將HashMap的每個鍵的數據映射到布局文件中對應控制項上。這個布局文件一般根據自己的需要來自己定義。梳理一下使用SimpleAdapter的步驟。
(1)根據需要定義ListView每行所實現的布局。
(2)定義一個HashMap構成的列表,將數據以鍵值對的方式存放在裡面。
(3)構造SimpleAdapter對象。
(4)將LsitView綁定到SimpleAdapter上。
4.12.3 ListView使用BaseAdapter與ListView的優化
在ListView的使用中,有時候還需要在裡面加入按鈕等控制項,實現單獨的操作。也就是說,這個ListView不再只是展示數據,也不僅僅是這一行要來處理用戶的操作,而是裡面的控制項要獲得用戶的焦點。讀者可以試試用SimpleAdapter添加一個按鈕到ListView的條目中,會發現可以添加,但是卻無法獲得焦點,點擊操作被ListView的Item所覆蓋。這時候最方便的方法就是使用靈活的適配器BaseAdapter了。

『陸』 android 中listview 的用法

1.在xml裡面定義一個ListView,這個xml是一個activity的layout文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView android:layout_width="wrap_content" //定義一個listView
android:layout_height="wrap_content"
android:id="@+id/ListView01"
/>
</LinearLayout>

2.定義ListView每個條目的Layout,比如命名為listview_item.xml,用RelativeLayout實現:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:paddingBottom="4dip"
android:paddingLeft="12dip"
android:paddingRight="12dip">
<ImageView
android:paddingTop="12dip"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ItemImage"
/>
<TextView
android:text="TextView01"
android:layout_height="wrap_content"
android:textSize="20dip"
android:layout_width="fill_parent"
android:id="@+id/ItemTitle"
/>
<TextView
android:text="TextView02"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_below="@+id/ItemTitle"
android:id="@+id/ItemText"
/>
</RelativeLayout>

3.在Activity裡面調用和加入Listener,具體見注釋:
package com.ray.test;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;

public class TestListView extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//綁定Layout裡面的ListView
ListView list = (ListView) findViewById(R.id.ListView01);

//生成動態數組,加入數據
ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
for(int i=0;i<10;i++)
{
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("ItemImage", R.drawable.checked);//圖像資源的ID
map.put("ItemTitle", "Level "+i);
map.put("ItemText", "Finished in 1 Min 54 Secs, 70 Moves! ");
listItem.add(map);
}
//生成適配器的Item和動態數組對應的元素,這里用SimpleAdapter作為ListView的數據源
//如果條目布局比較復雜,可以繼承BaseAdapter來定義自己的數據源。
SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//數據源
R.layout.list_items,//ListItem的XML實現
//動態數組與ImageItem對應的子項
new String[] {"ItemImage","ItemTitle", "ItemText"},
//ImageItem的XML文件裡面的一個ImageView,兩個TextView ID
new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText}
);

//添加並且顯示
list.setAdapter(listItemAdapter);

//添加點擊
list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
setTitle("點擊第"+arg2+"個項目");
}
});

//添加長按點擊
list.(new OnCreateContextMenuListener() {

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
menu.setHeaderTitle("長按菜單-ContextMenu");
menu.add(0, 0, 0, "彈出長按菜單0");
menu.add(0, 1, 0, "彈出長按菜單1");
}
});
}

//長按菜單響應函數
@Override
public boolean onContextItemSelected(MenuItem item) {
setTitle("點擊了長按菜單裡面的第"+item.getItemId()+"個項目");
return super.onContextItemSelected(item);
}
}

『柒』 Android的ListView

這個是默認的適配,含兩個textview,大字的和小字的,設置適配器可以自己創建的時候把textview的id寫成new int[]{R.id.x,R.id.x}就好了

『捌』 Android listview圖文混排,有文字,圖片,音頻,視頻 如何判斷數據類別

你上面的那麼些就行,你的listview
是圖文混排,但是你的listview的填充數據肯定是存在一個list中的吧?
首先就是在你的這個函數里,根據參數position,找到list中這個位置是哪種類型,根據他的類型返回不同的布局,然後再getView函數里調用getItemViewType得到布局,根據布局不同來初始化不同的布局並載入數據,這樣就成了每個條目都是根據他的position來做布局的

『玖』 android中listview怎麼用

創建繼承BaseAdapter並實現其抽象方法的類MyListViewAdapter
說明
下面的講解中,只創建自定義的適配器類,如何使用請參考android中常用控制項的使用之ListView
1.創建類MyListViewAdapter
創建類MyListViewAdapter,該類繼承BaseAdapter,並實現其抽象方法:
1
2
3
4

int getCount();
Object getItem(int position);
long getItemId(int position);
View getView(int position,View convertView,ViewGroup parent);

getCount需要返回有多少個item,也就是說最會在listview中展示這么多行
getItem需要返回參數position位置的數據
getItemId返回position就行了
2.給MyListViewAdapter類添加成員變數和構造方法
兩個成員變數
1
2

List<String> list;
Context context;

list表示要顯示的數據,context變數在生成View對象時需要用到
構造方法:構造方法是為了給兩個成員變數賦值
1
2
3
4

public MyListViewAdapter(List<String> list , Context context) {
this.list = list;
this.context = context;
}

3.給getCount,getItem,getItemId方法添加代碼
getCount需要返回有多少個item,也就是說最會在listview中展示這么多行,所以返回list.size
getItem需要返回參數position位置的數據,也就是list中第position項的值list.get(position)
getItemId返回position就行了
1
2
3
4
5
6
7
8
9
10
11
12
13
14

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int position) {
return list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

4.給getView方法添加代碼
getView方法是返回位置為position的View對象,第二個參數convertView考慮到資源重用問題,在上下滑動的過程中,需要顯示某項的時候才會調用getView方法,而如果有某項被隱藏不顯示,就會把不顯示那一行的View作為convertView參數傳入,如果沒有某項被隱藏,convertView值為null。可以通過下面代碼中的if(convertView!=null)中的輸出來看哪一行被隱藏了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("調用getView方法,顯示position="+position+"項");
if(convertView!=null){
TextView t = (TextView) convertView.findViewById(R.id.firstTextView);
System.out.println(t.getText());
}else{
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.item_mylistviewadapter, null);
}
TextView t = (TextView)(convertView.findViewById(R.id.firstTextView));
t.setText(list.get(position));
if(position%2==0)
{
t.setBackgroundColor(Color.WHITE);

}
else{
t.setBackgroundColor(Color.GRAY);
}
return convertView;
}

補充:通過xml生成View對象
通過Context對象生成一個LayoutInflater對象
調用LayoutInflater對象的inflate方法生成控制項對象,inflate方法的第一個參數為xml文件,第二個參數一般為null。返回值為該xml文件最外層的標簽對象。
1
2

LayoutInflater layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout convertView =(LinearLayout)layoutInflater.inflate(R.layout.item_mylistvie

源代碼下載
pan..com/s/1ntuQDdv

『拾』 android 中listview是怎麼用的

表的顯示需要三個元素:
1.ListVeiw 用來展示列表的View。
2.適配器 用來把數據映射到ListView上的中介。
3.數據 具體的將被映射的字元串,圖片,或者基本組件。
根據列表的適配器類型,列表分為三種,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最為簡單,只能展示一行字。SimpleAdapter有最好的擴充性,可以自定義出各種效果。SimpleCursorAdapter可以認為是SimpleAdapter對資料庫的簡單結合,可以方面的把資料庫的內容以列表的形式展示出來。
我們從最簡單的ListView開始:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

/**
* @author allin
*
*/
public class MyListView extends Activity {

private ListView listView;
//private List<String> data = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

listView = new ListView(this);
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));
setContentView(listView);
}

private List<String> getData(){

List<String> data = new ArrayList<String>();
data.add("測試數據1");
data.add("測試數據2");
data.add("測試數據3");
data.add("測試數據4");

return data;
}
}

上面代碼使用了ArrayAdapter(Context context, int textViewResourceId, List<T> objects)來裝配數據,要裝配這些數據就需要一個連接ListView視圖對象和數組數據的適配器來兩者的適配工作,ArrayAdapter的構造需要三個參數,依次為this,布局文件(注意這里的布局文件描述的是列表的每一行的布局,android.R.layout.simple_list_item_1是系統定義好的布局文件只顯示一行文字,數據源(一個List集合)。同時用setAdapter()完成適配的最後工作。運行後的現實結構如下 :

SimpleCursorAdapter
sdk的解釋是這樣的:An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file. You can specify which columns you want, which views you want to display the columns, and the XML file that defines the appearance of these views。簡單的說就是方便把從游標得到的數據進行列表顯示,並可以把指定的列映射到對應的TextView中。

熱點內容
手機app緩存可不可以刪 發布:2025-01-13 03:10:46 瀏覽:937
安卓怎麼顯示第五個人圖鑒 發布:2025-01-13 03:03:23 瀏覽:922
內網訪問很慢 發布:2025-01-13 03:01:01 瀏覽:454
魔獸腳本p閃 發布:2025-01-13 02:58:40 瀏覽:290
java遞減 發布:2025-01-13 02:54:40 瀏覽:489
決策樹的演算法例題 發布:2025-01-13 02:53:15 瀏覽:448
腳本四要素 發布:2025-01-13 02:40:18 瀏覽:929
編譯過程序後無法運行 發布:2025-01-13 02:40:16 瀏覽:306
c語言8位元組 發布:2025-01-13 02:38:51 瀏覽:707
ps3iso文件夾 發布:2025-01-13 02:10:09 瀏覽:292