[android] 05_(很重要)ListView

Android 4.0

ListView (很重要)


一、ListView(很重要)

1、工作原理:

a) 调用Adapter中的getCount()方法,返回要当前列表里有多个个条目

b) 计算每一个条目的高度

c) 计算出当前手机屏幕可以显示多少个View

d) 调用getView()方法,将当前的View显示在手机上面。

2、关键方法

实现getCount 返回总的个数
实现getView  返回每个位置对应的view对象.
 
3、屏幕上只显示固定的view,如果超出,将有一个新的view对象创建,那么就会有一个旧的view被回收

注意:如果ListView,屏幕拖拽速度过快,会报异常,原因是垃圾回收机制,来不及回收销毁的view

4、无穷尽的ListView

public int getCount() {
    return Integer.MAX_VALUE;// 设置无穷尽的条目
}
二、无穷尽的ListView做法
 
1、xml布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        ></ListView>
</RelativeLayout>
 
2、MainActivity.java
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
 
public class MainActivity extends Activity {
    private ListView lv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        lv = (ListView) this.findViewById(R.id.lv);
        lv.setAdapter(new MyListAdapter());// Sets the data behind this ListView.
    }
    private class MyListAdapter extends BaseAdapter {
 
        // 返回总的个数
        @Override
        public int getCount() {
            return Integer.MAX_VALUE;// 设置无穷尽的条目
        }
 
        // 返回每个位置对应的view对象
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            
            TextView tView = new TextView(MainActivity.this);
            switch (position % 3) {
            case 0:
                tView.setText("苹果。。。");
                break;
            case 1:
                tView.setText("荔枝。。。");
                break;
            case 2:
                tView.setText("花生。。。");
                break;
            case 3:
                tView.setText("香蕉。。。");
                break;
            }
            return tView;
        }
 
        @Override
        public Object getItem(int position) {
            return null;
        }
        @Override
        public long getItemId(int position) {
            return 0;
        }
    }
}
3、效果: