多种Item布局的ListView的实现方法

[Quik Start]

  1. 继承BaseAdapter, 具体实现请参考\android\widget\SimpleAdapter.java
  2. 重载 public View getView(int position, View convertView, ViewGroup parent) , 并在该函数里通过接口来加载不同Item的布局(单一布局的情况下, 到这里就已经可以完成功能了...)
  3. 重载BaseAdapter中的 public int getViewTypeCount()public int getItemViewType(int position) 两个函数. 其中, 前者是用来告诉ListView有多少种Item布局, 而后者是用来告诉ListView应该根据位于position的元素返回第n(0,1,...N-1)种布局, 而ListView则根据该值来判断在调用getView时应该传入已缓存的convertView.


[Example]

/**
 * 现以2种布局为例, 另外,代码要根据自身需求做响应修改
 */
public class ExampleAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    ... ...

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v;
        if (convertView == null) {
            // 根据position元素生成item布局
            int resource = ? [R.layout.item1 | R.layout.item2];
            v = mInflater.inflate(resource, parent, false);
        } else {
            v = convertView;
        }
    }

    @Override
    public int getItemViewType(int position) {
        // 根据position元素返回View的类型, type值是从0开始排序的
        int type = ? [0 | 1];
        return type;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

}


[Learn More]

  1. ListView的缓存机制的讲解
  2. ListView & Adapter 基础
  3. View 与 Tag 的关系




你可能感兴趣的:(android,ListView,Adapter,布局,widget)