abstract:ListView就是用來顯示一行一行的條目的MVC結(jié)構(gòu) * M:model模型層,要顯示的數(shù)據(jù) ————people集合 * V:view視圖層,用戶看到的界面 &n
ListView
就是用來顯示一行一行的條目的
MVC結(jié)構(gòu)
* M:model模型層,要顯示的數(shù)據(jù) ————people集合
* V:view視圖層,用戶看到的界面 ————ListView
* c:control控制層,操作數(shù)據(jù)如何顯示 ————adapter對象
每一個條目都是一個View對象
BaseAdapter
* 必須實(shí)現(xiàn)的兩個方法
* 第一個
//系統(tǒng)調(diào)用此方法,用來獲知模型層有多少條數(shù)據(jù)
@Override
public int getCount() {
return people.size();
}
* 第二個
//系統(tǒng)調(diào)用此方法,獲取要顯示至ListView的View對象
//position:是return的View對象所對應(yīng)的數(shù)據(jù)在集合中的位置
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView方法調(diào)用" + position);
TextView tv = new TextView(MainActivity.this);
//拿到集合中的元素
Person p = people.get(position);
tv.setText(p.toString());
//把TextView的對象返回出去,它會變成ListView的條目
return tv;
}
屏幕上能顯示多少個條目,getView方法就會被調(diào)用多少次,屏幕向下滑動時,getView會繼續(xù)被調(diào)用,創(chuàng)建更多的View對象顯示至屏幕
條目的緩存
當(dāng)條目劃出屏幕時,系統(tǒng)會把該條目緩存至內(nèi)存,當(dāng)該條目再次進(jìn)入屏幕,系統(tǒng)在重新調(diào)用getView時會把緩存的條目作為convertView參數(shù)傳入,但是傳入的條目不一定是之前被緩存的該條目,即系統(tǒng)有可能在調(diào)用getView方法獲取第一個條目時,傳入任意一個條目的緩存
代碼如下:
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.list.MainActivity" > <ListView android:id="@+id/lv" android:layout_width="fill_parent" android:layout_height="fill_parent" ></ListView> </LinearLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/iv" android:src="@drawable/xing" android:layout_width="80dp" android:layout_height="80dp" /> <TextView android:id="@+id/t1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/t2" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
MainActivity.java
public class MainActivity extends Activity { List<shopInfo> l; ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); //準(zhǔn)備集合數(shù)據(jù) l = new ArrayList<shopInfo>(); l.add(new shopInfo(R.drawable.xing, "name-1", "content-1")); l.add(new shopInfo(R.drawable.xing, "name-2", "content-2")); l.add(new shopInfo(R.drawable.xing, "name-3", "content-3")); l.add(new shopInfo(R.drawable.xing, "name-4", "content-4")); l.add(new shopInfo(R.drawable.xing, "name-5", "content-5")); l.add(new shopInfo(R.drawable.xing, "name-6", "content-6")); l.add(new shopInfo(R.drawable.xing, "name-7", "content-7")); l.add(new shopInfo(R.drawable.xing, "name-8", "content-8")); //準(zhǔn)備BaseAdapter對象 MyAdapter a = new MyAdapter(); //設(shè)置Adapter顯示數(shù)據(jù) lv.setAdapter(a); } //這個類可以寫在里面,也可以寫在外面 public class MyAdapter extends BaseAdapter { @Override public int getCount() { // TODO Auto-generated method stub return l.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub // 加載item的布局 View view = View.inflate(MainActivity.this, R.layout.item, null); shopInfo s = l.get(position); ImageView i = (ImageView) view.findViewById(R.id.iv); TextView t1 = (TextView) view.findViewById(R.id.t1); TextView t2 = (TextView) view.findViewById(R.id.t2); i.setImageResource(s.getIcon()); t1.setText(s.getName()); t2.setText(s.getContent()); convertView = view ; return convertView; } } }
shopInfo.java
//每行item的數(shù)據(jù)信息封裝類 public class shopInfo { private int icon; private String name; private String content; public int getIcon() { return icon; } public void setIcon(int icon) { this.icon = icon; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public shopInfo(int icon, String name, String content) { super(); this.icon = icon; this.name = name; this.content = content; } @Override public String toString() { return "shopInfo [icon=" + icon + ", name=" + name + ", content=" + content + "]"; } public shopInfo() { super(); // TODO Auto-generated constructor stub } }