《《android__listview_item》.doc
文本预览下载声明
ListView 和 Adapter 的基础
工作原理:
ListView 针对List中每个item,要求 adapter “给我一个视图” (getView)。
一个新的视图被返回并显示
如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?NO!这不可能!
实际上Android为你缓存了视图。
Android中有个叫做Recycler的构件,下图是他的工作原理:
如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中。
ListView先请求一个type1视图(getView)然后请求其他可见的项目。convertView在getView中是空(null)的。
当item1滚出屏幕,并且一个新的项目从屏幕低端上来时,ListView再请求一个type1视图。convertView此时不是空值了,它的值是item1。你只需设定新的数据然后返回convertView,不必重新创建一个视图。
请看下面的示例代码,这里在getView中使用了System.out进行输出
view source
print?
01 public class MultipleItemsList extends ListActivity {
02 ???
03 ????private MyCustomAdapter mAdapter;
04 ???
05 ????@Override
06 ????public void onCreate(Bundle savedInstanceState) {
07 ????????super.onCreate(savedInstanceState);
08 ????????mAdapter = new MyCustomAdapter();
09 ????????for (int i = 0; i 50; i++) {
10 ????????????mAdapter.addItem(item + i);
11 ????????}
12 ????????setListAdapter(mAdapter);
13 ????}
14 ???
15 ????private class MyCustomAdapter extends BaseAdapter {
16 ???
17 ????????private ArrayList mData = new ArrayList();
18 ????????private LayoutInflater mInflater;
19 ???
20 ????????public MyCustomAdapter() {
21 ????????????mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
22 ????????}
23 ???
24 ????????public void addItem(final String item) {
25 ????????????mData.add(item);
26 ????????????notifyDataSetChanged();
27 ????????}
28 ???
29 ????????@Override
30 ????????public int getCount() {
31 ????????????return mData.size();
32 ????????}
33 ???
34 ????????@Override
35 ????????public String getItem(int position) {
36 ????????????return mData.get(position);
37 ????????}
38 ???
39 ????????@Override
40 ????????public long getItemId(int position) {
41 ????????????return position;
42 ????????}
43 ???
44 ????????@Override
45 ????????public View getView(int position, View convertView, ViewGroup parent) {
46 ????????????System.out.
显示全部