一、直接在布局檔案中使用ListView
1、布局檔案
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 tools:context=".MainActivity"> 7 8 <ListView 9 android:id="@+id/lv_list" 10 android:layout_width="match_parent" 11 android:layout_height="match_parent" /> 12 13 </RelativeLayout>
2、填充ListView代碼
1 package com.ietree.listviewdemo; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.os.Bundle; 6 import android.view.View; 7 import android.view.ViewGroup; 8 import android.widget.BaseAdapter; 9 import android.widget.ListAdapter; 10 import android.widget.ListView; 11 import android.widget.TextView; 12 13 public class MainActivity extends AppCompatActivity { 14 private ListView lv_list; 15 16 @Override 17 protected void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 setContentView(R.layout.activity_main); 20 21 // 獲取ListView控制元件 22 lv_list = findViewById(R.id.lv_list); 23 // 給ListView控制元件設定自定義配接器 24 lv_list.setAdapter(new MyAdapter()); 25 } 26 27 /** 28 * 定義一個配接器 29 */ 30 private class MyAdapter extends BaseAdapter { 31 // 回傳需要顯示的條目數 32 @Override 33 public int getCount() { 34 return 100; 35 } 36 37 @Override 38 public Object getItem(int position) { 39 return null; 40 } 41 42 @Override 43 public long getItemId(int position) { 44 return 0; 45 } 46 47 /** 48 * 獲取一個View用來顯示ListView的資料,會作為ListView的一個條目顯示 49 * @param position 當前需要顯示的View的索引 50 * @param convertView 或存資料的物件 51 * @param parent 52 * @return 回傳需要顯示的View 53 */ 54 @Override 55 public View getView(int position, View convertView, ViewGroup parent) { 56 TextView textView = new TextView(MainActivity.this); 57 textView.setText("這是第" + position + "個TextView"); 58 return textView; 59 } 60 } 61 }
3、結果顯示

4、幾個需要注意的問題
1、ListView的布局不建議使用
原因:
假如我們需要顯示5個item,在使用 android:layout_height="wrap_content"的布局情況下,getView()方法會被呼叫9次,原因是他需要計算需要多少個item把當前界面填滿,所以會回圈呼叫多次,


但是如果使用 android:layout_height="match_parent" ,getView()方法就最多被呼叫5次,所以,一般推薦item在布局時使用android:layout_height="match_parent" 減少重復呼叫次數,

2、假如需要顯示的item有10000個,使用上面的每加載一個item就要新生成一個TextView物件的方法,會導致在滑動程序中加載內容過多導致卡頓或者記憶體溢位的情況,所以需要復用TextView物件,改造過后如下:
/** * 獲取一個View用來顯示ListView的資料,會作為ListView的一個條目顯示 * * @param position 當前需要顯示的View的索引 * @param convertView 或存資料的物件 * @param parent * @return 回傳需要顯示的View */ @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = null; if (convertView == null) { System.out.println("創建新物件"); textView = new TextView(MainActivity.this); } else { System.out.println("復用老對象"); textView = (TextView) convertView; } textView.setText("這是第" + position + "個TextView"); return textView; }
結果如下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/232425.html
標籤:Android
