Android-ListView-(BaseAdapter初步)
阿新 • • 發佈:2018-12-10
在Android中就提供了專門列表顯示條目的控制元件,ListView控制元件,ListView控制元件不是一次性載入全部資料,他是隻載入使用者在螢幕看得到的資料,當用戶滑動的過程中在去載入新的資料,同時會自動銷燬之前載入過的資料
什麼時候使用ListView ?
答:當很多條目Item,顯示都內容不同,資料不同,但是存放的位置是相似的,並且動態變化的條目Item(和資料),就可以用ListView
ListView的使用:
1.在佈局中定義ListVIew
<?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="match_parent"> <!-- 定義ListView --> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView> </RelativeLayout>
2.在Java程式碼中找到ListVIew,再設定介面卡 setAdapter(ListAdapter的子類)
為何有BaseAdapter的出現 ?
答:無論是ArrayAdapter還是SimpleAdapter,都是都不夠靈活,所以Android提供了BaseAdapter介面卡,BaseAdapter可以自定義介面卡。
BaseAdapter是 ArrayAdapter 和 SimpleAdapter 的父類,所以可以理解為:ArrayAdapter 和 SimpleAdapter 都去繼承了BaseAdapter後進行了封裝
ListView+BaseAdapter程式碼:
package liudeli.ui.all; import android.app.Activity; import android.os.Bundle; import android.widget.ListAdapter; import android.widget.ListView; public class ListViewActivity2 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listview2); ListView listView = findViewById(R.id.listview); ListAdapter listAdapter = new MyBaseAdapter(); listView.setAdapter(listAdapter); } @Override protected void onDestroy() { super.onDestroy(); } }
自定義BaseAdapter:
package liudeli.ui.all; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; public class MyBaseAdapter extends BaseAdapter { private final String TAG = MyBaseAdapter.class.getSimpleName(); /** * 此方法是返回 Item條目都總數,此方法非常重要 * @return */ @Override public int getCount() { return 10; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } /** * 此方法是返回 每一個條目Item的View,有十個條目Item就會執行此方法十次,此方法非常重要 * @param position * @param convertView * @param parent * @return */ @Override public View getView(int position, View convertView, ViewGroup parent) { Log.d(TAG, "呼叫了一次 getView position:" + position); return null; } }
看顯示的結果,就明白為什麼說,getCount(); getView() 方法重要了
BaseAdapter 內部的實現:首先是要得到getCount(); 條目Item的總數,然後在去呼叫getView() 把getView 得到的View 繫結給條目Item載入等操作