1. 程式人生 > >Android-ListView-(BaseAdapter初步)

Android-ListView-(BaseAdapter初步)

在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載入等操作