Android 复习笔记5 listView ArrayList

列表 listview

列表应该算得上是最难的系统自带组件了;归根结底,是因为listview本质要完成mvc所有层次;

1

既然是一个列表,那就应该有列表项,所以数据就会很多。那不管你元数据有多少条,我要做的事是把你的数据想办法发到页面上;
既然有列表项,而我们需要一个中转站 一个能够将数据打包发给页面的
这就是ArrayAdapter<> 一个适配器 很明显它应该处于control层;控制数据传输给页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class CrimeListFragment extends android.support.v4.app.ListFragment{ //listview控制器
@Override
public void onCreate(Bundle savedInstanceState)
{
//造一个CrimeAdapter 出来
CrimeAdapter crimeAdapter =new CrimeAdapter(crimes);
setListAdapter(crimeAdapter);//将适配器传给listview
}
private class CrimeAdapter extends ArrayAdapter<Crime> {
public CrimeAdapter(ArrayList<Crime> crimes)
{
super(getActivity(),0,crimes);//
}
int a=0;
@Override
public View getView (int position, View convertView, ViewGroup parent)
{
//通过getView函数自定义组件 可以通过自定义xml引入自定义组件;
return convertView;
}
}

2

对于元数据,如果我们的数据是一个类型的,而我们需要将其发送给ArrayAdapter<> ,我们总不能用for循环吧,ArrayAdapter<>需要的便是一个数据集合对象;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class CrimeLab //crime类就不列出了
{
//单例 整个类只有一个对象;
private static CrimeLab crimeLab;
private Context appcontext;
private CrimeLab(Context appcontext)
{
this.appcontext=appcontext;
}
public static CrimeLab get(Context c){ //该方法使得应用整个周期 单例都存活
if(crimeLab==null)
{
crimeLab=new CrimeLab(c.getApplicationContext());
}
return crimeLab;
}
}