日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

發(fā)布時(shí)間:2024/7/23 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我最近做項(xiàng)目用到了基本適配器BaseAdapter,所以寫篇博客總結(jié)一下,希望也能對(duì)你有所幫助

什么時(shí)候用BaseAdapter(同一項(xiàng)存在多個(gè)控件,復(fù)雜的列表時(shí))

Android中Adapter類其實(shí)就是把數(shù)據(jù)源綁定到指定的View上,然后再返回該View,而返回來的這個(gè)View就是ListView中的某一行item。這里返回來的View正是由我們的Adapter中的getView方法返回的。這樣就會(huì)容易理解數(shù)據(jù)是怎樣一條一條顯示在ListView 中的。

簡(jiǎn)單的ListView可使用ArrayAdapter和SimpleAdapter兩種適配器。其中, ArrayAdapter適用于純文本的列表數(shù)據(jù),SimpleAdapter適用于帶圖標(biāo)的列表數(shù)據(jù)。實(shí)際應(yīng)用中常常有更復(fù)雜的列表,比如同一項(xiàng)中存在多個(gè)控件,這種情況即使用SimpleAdapter也很吃力,而且不易擴(kuò)展。基于此, Android提供了一種適應(yīng)性更強(qiáng)的基本適配器BaseAdapter,該適配器允許開發(fā)者在別的代碼文件中進(jìn)行邏輯處理,大大提高了代碼的可讀性和可維護(hù)性。

step1:創(chuàng)建列表單行的布局

新建一個(gè)layout,和普通的layout文件差不多,只不過這個(gè)文件設(shè)置的是ListView單項(xiàng)的樣式。

例如:item_layout.xml

android:id="@+id/textview_date"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView"android:textAppearance="@style/TextAppearance.AppCompat.Medium"android:visibility="visible" />

android:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal">

android:id="@+id/image_time"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="0.5" />

android:id="@+id/textview_time"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:textAppearance="@style/TextAppearance.AppCompat.Large" />

step2:實(shí)現(xiàn)BaseAdapter的基本方法

寫一個(gè)新的適配器繼承BaseAdapter,從BaseAdapter派生的數(shù)據(jù)適配器主要實(shí)現(xiàn)下面幾個(gè)方法。

構(gòu)造函數(shù):指定適配器需要處理的數(shù)據(jù)集合。

getCount:獲取數(shù)據(jù)項(xiàng)的個(gè)數(shù)。

getView:獲取每項(xiàng)的展示視圖,并對(duì)每項(xiàng)的內(nèi)部控件進(jìn)行業(yè)務(wù)處理。

getItem:數(shù)據(jù)集中指定索引對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。

例如:

public class MyListAdapter extendsBaseAdapter {

Context context;

List data; //數(shù)據(jù)源int layout; //Item布局

public MyListAdapter(Context context, int layout ,Listdata){this.context=context;this.layout=layout;this.data=data;

}/*** 這里的getCount方法是程序在加載顯示到ui上時(shí)就要先讀取的

* 這里獲得的值決定了listview顯示多少行

* 實(shí)際應(yīng)用中此處的返回值是由從數(shù)據(jù)庫中查詢出來的數(shù)據(jù)的總條數(shù)*/@Overridepublic intgetCount() {return data == null ? 0: data.size();

}/*** 根據(jù)ListView所在位置返回View

*@paramposition

*@return選中的數(shù)據(jù)*/@Overridepublic Object getItem(intposition) {

Nbp_data Nbp_choosen_data=data.get(position);//return Nbp_choosen_data == null ? null : data.get(position);

returnNbp_choosen_data;

}/*** 根據(jù)ListView位置得到數(shù)據(jù)源集合中的Id

*@paramposition

*@return

*/@Overridepublic long getItemId(intposition) {returnposition;

}/*** 重寫adapter最重要的就是重寫此方法,此方法也是決定listview界面的樣式的

*@paramposition

*@paramconvertView

*@paramparent

*@return

*/@Overridepublic View getView(intposition, View convertView, ViewGroup parent) {

ImageView imageView_time;

TextView textView_time;

TextView textView_date;final p_data record_data=data.get(position);if (convertView == null) {

convertView= LayoutInflater.from(context).inflate(layout,null);

}else{

}

imageView_time=(ImageView) convertView.findViewById(R.id.image_time);

textView_time=(TextView) convertView.findViewById(R.id.textview_time);

textView_date=(TextView) convertView.findViewById(R.id.textview_date);

imageView_time.setImageResource(record_data.getTimeImage());

textView_date.setText(record_data.getDATE());

textView_time.setText(record_data.getTIME());

returnconvertView;

}

}

在列表單行控件比較多的時(shí)候,ViewHolder方法可大幅度優(yōu)化ListView的滑動(dòng)。

step3:在Activity或Fragment中與ListView綁定

例如:

//在fragment的onCreateView()中

MyListAdapter myListAdapter=newMyListAdapter(root.getContext(),R.layout.item_layout,recorded_data);

ListView listView=(ListView)root.findViewById(R.id.lv_recordedData);

listView.setAdapter(myListAdapter);//設(shè)置事件監(jiān)聽

listView.setOnItemClickListener(newAdapterView.OnItemClickListener() {

@Overridepublic void onItemClick(AdapterView> arg0, View arg1, int arg2, longarg3) {

p_data choosen_data=(p_data)arg0.getItemAtPosition(arg2);int date =choosen_data.getDATE();int time =choosen_data.getTIME();}

});長(zhǎng)按事件監(jiān)聽

// listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){//@Override//public boolean onItemLongClick(AdapterView> arg0, View arg1, int arg2, long arg3){//return true;//}//});

參考:

《Android Studio開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到App上線》?歐陽燊??清華大學(xué)出版社

原文:https://www.cnblogs.com/XIEjm/p/12813935.html

總結(jié)

以上是生活随笔為你收集整理的android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。