android开发学习笔记——ListView的使用和BaseAdapter的继承

场景需求描述:

  在android开发过程中,UI经常需要动态加载一个由任意数量类似的项所构成的列表,因为其项的数量是不定的,而且可能动态改变,因此不能在xml文件中静态设置。而应使用“在xml中放置listView,在java代码中动态加载”的方式实现。

 

具体实现步骤

     一、在需要显示列表的activity中放置ListView组件(不再赘述)

     二、创建并设计好一项的布局文件(同样不再赘述)

     三、根据一项的各种组件,创建继承自BaseAdapter的自定义Adapter

              这里是核心,创建一个继承自BaseAdapter的类,一般至少需要定义或重写其五个方法。但是在重写之前,先要在这个类里新加一个数据成员,也就是关于你的每一项的数组,比如说你的一个列表项是由两个TextView构成的。那么这个数组就为

           ArrayList data = new ArrayList<>();

以此类推,有必要的话,写个合适的内部类来指定这个数据的类型。

            之后,定义第一个方法构造方法,要求参数一般是Context用于创建Inflater来实例化你的布局文件和一个data的类型来初始化数据,有时,如果有需要对Activity的操作的话,可以把Context换成Activity。构造方法里就进行一些最基本的数组的初始化操作即可。(关于每一项的具体内容初始化,要放到getView()里)。在强调一遍,一般要在这里利用Context初始化一个Inflater成员变量,以便重写后面的getView()方法

           接着是重写第二个方法,

             getCount()

如果在没有特殊业务需求的情况下一般上述data的size()即可;

            然后重写第三个方法,

            getItem(int position)

如果在没有特殊业务需求的情况下一般也返回上述data.get(position)即可;

         第四个方法

           getItemId(int position)

没有为数据定义特别的ID的话,就返回postion就行

重点是最后一个方法的重写

           View getView(int position, View convertView, ViewGroup parent) 

这个方法就是BaseAdapter用于生成你每一个列表项所要调用的方法。

            先简要说明一下参数,position就是当前UI项的下标,用来对应你的data下标;

                                                 convertView是一个列表项的视图对象,在第一次调用时为null,后面更更新视图调用时不为null,所以用之前一定要检验其是否为null,不然会报空指针异常;

                                                   parent就是这个列表项视图最终归属的父视图

      了解完参数的含义后,以每一个列表项为两个TextView为例(id分别假设为text1、text2,data为ArrayList),来进行一次重写

@Override  

public  View getView(int position, View convertView, ViewGroup parent){

     String[] twoTexts = null;
     if(convertView == null){
        converView = inflater.inflater(R.layout.item,parent,false);
        TextView firstText = (TextView)convertView.findViewById(R.id.text1);
        TextView secondText = (TextView)convertView.findViewById(R.id.text1);
        //下面是对两个TextView的一些操作,这里取最简单的直接拿data初始化
        twoTexts = data.get(postion);
        firstText.setText(twoTexts[0]);
        secondText.setText(twoTexts[1]);
     }
      return convertView;
}

 

最后在你的Activity获取到ListView对象,直接

         

ArrayList data = new ArrayList<>();
data.add(new String[]{"第一项的text1","第一项的text2"});
data.add(new String[]{"第二项的text1","第二项的text2"});
listView.setAdapter(new YourAdapter(YourActivity.this,data));

   大功告成!

你可能感兴趣的:(android开发笔记,android开发学习笔记)