首頁 > 手機軟體

android ListView自定義開發範例

2019-11-28 08:18:19

ListView作為列表控制元件,通過系結自定義的介面卡資料,展示一個具有圖片,文字展示框和按鈕的自定義的列表

1

新建一個android專案,名稱為ListViewAuto,其餘引數可以自己設定,點選完成,生成專案檔案



2

完成列表要展示的選項範例類,ItemView,其中屬性有

//要展示的圖片資訊

private  ImageView image;

//標題資訊 

private TextView title;

//按鈕資訊

private Button button;

然後生成對應get,set方法


3

設定設定檔案,main.xml

宣告ID以及長寬屬性

 <ListView   

        android:id="@+id/listInfo"  

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"></ListView>


4

設定ListView中各個選項的樣式設定檔案listview.xml,宣告一個ImageView展示圖片,TextView展示文字資訊,Button展示按鈕資訊


5

實現自定義介面卡,必須手動對映資料,這時就需要重寫getView()方法,系統在繪制列表的每一行的時候將呼叫此方法。 ListView在開始繪製的時候,系統自動呼叫getCount()函數,根據函數返回值得到ListView的長度,然後根據這個長度,呼叫getView()逐一畫出每一行。主要展示getView()方法實現

//展示記錄資訊

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

ItemView item=null;

if(convertView==null){

item= new ItemView();

 //獲得元件,範例化元件  

            convertView=layoutInflater.inflate(R.layout.listview, null); 

            item.setImage((ImageView)convertView.findViewById(R.id.imageView));

            item.setTitle((TextView)convertView.findViewById(R.id.title));

            item.setButton((Button)convertView.findViewById(R.id.button));

            //這個步驟很重要!!!

            //可以使用setTag把查詢的view快取起來方便多次重用

            convertView.setTag(item);

}else{

item=(ItemView)convertView.getTag();

}

//係結資料 ,將傳入data進行逐個賦值 

        item.getImage().setBackgroundResource((Integer)data.get(position).get("imageView"));

        item.getTitle().setText((String)data.get(position).get("title"));

        item.getButton().setText((String)data.get(position).get("button"));

        return convertView;  

}

下面是自定義介面卡ListViewAdapter的程式碼圖例



6

主體函數編寫,先是找到ListView控制元件,將資料放入介面卡中,進行資料展示

public class ListViewAutoShow extends Activity {

    /** Called when the activity is first created. */

 private ListView listInfo=null;  

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        listInfo=(ListView)findViewById(R.id.listInfo);  

        List<Map<String, Object>> result=getData();  

        listInfo.setAdapter(new ListViewAdapter(this, result)); 

    }

public List<Map<String, Object>> getData() {

// TODO Auto-generated method stub

 List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();  

       for (int i = 0; i < 10; i++) {  

           Map<String, Object> map=new HashMap<String, Object>();  

           map.put("imageView", R.drawable.ico_info);  

           map.put("title", "標題資訊"+i);  

           map.put("button", "檢視按鈕"+i);  

           list.add(map);  

       }  

       return list; 

}

}


7

執行程式,觀察執行結果




IT145.com E-mail:sddin#qq.com