您的位置:首页 > 移动开发 > Android开发

Android ListView中 每一项都有不同的布局

2015-03-28 21:11 190 查看
Adapter的代码

其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局

TYPE_1...是三种类型.

在使用不同布局的时候,getItemViewType和getViewType不能少,一般是不用这两个函数的重载的

class RunRankAdapter extends BaseAdapter {  

    ArrayList<HashMap<String, Object>> ls;  

    Context mContext;  

    LinearLayout linearLayout = null;  

    LayoutInflater inflater;  

    TextView tex;  

    final int VIEW_TYPE = 3;  

    final int TYPE_1 = 0;  

    final int TYPE_2 = 1;  

    final int TYPE_3 = 2;  

  

    public RunRankAdapter(Context context,  

            ArrayList<HashMap<String, Object>> list) {  

        ls = list;  

        mContext = context;  

    }  

  

    @Override  

    public int getCount() {  

        return ls.size();  

    }  

  

    @Override  

    public Object getItem(int position) {  

        return ls.get(position);  

    }  

  

    @Override  

    public long getItemId(int position) {  

        return 0;  

    }  

  

    // 每个convert view都会调用此方法,获得当前所需要的view样式  

    @Override  

    public int getItemViewType(int position) {  

        int p = position;  

        if (p == 0)  

            return TYPE_1;  

        else if (p == 1)  

            return TYPE_2;  

        else  

            return TYPE_3;  

    }  

  

    @Override  

    public int getViewTypeCount() {  

        return 3;  

    }  

  

    @Override  

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

        ViewHolder1 holder1 = null;  

        ViewHolder2 holder2 = null;  

        ViewHolder3 holder3 = null;  

        int type = getItemViewType(position);  

        if (convertView == null) {  

            inflater = LayoutInflater.from(mContext);  

            // 按当前所需的样式,确定new的布局  

            switch (type) {  

            case TYPE_1:  

  

                convertView = inflater.inflate(R.layout.item_runrank1,  

                        parent, false);  

                holder1 = new ViewHolder1();  

                holder1.rank1 = (TextView) convertView  

                        .findViewById(R.id.tv_list1_rank);  

                holder1.time1 = (TextView) convertView  

                        .findViewById(R.id.tv_list1_time);  

                convertView.setTag(holder1);  

                break;  

            case TYPE_2:  

                convertView = inflater.inflate(R.layout.item_runrank2,  

                        parent, false);  

                holder2 = new ViewHolder2();  

                holder2.rank2 = (TextView) convertView  

                        .findViewById(R.id.tv_list2_rank);  

                holder2.time2 = (TextView) convertView  

                        .findViewById(R.id.tv_list2_time);  

                convertView.setTag(holder2);  

                break;  

            case TYPE_3:  

                convertView = inflater.inflate(R.layout.item_runrank3,  

                        parent, false);  

                holder3 = new ViewHolder3();  

                holder3.rank3 = (TextView) convertView  

                        .findViewById(R.id.tv_list3_rank);  

                holder3.time3 = (TextView) convertView  

                        .findViewById(R.id.tv_list3_time);  

                convertView.setTag(holder3);  

                break;  

            default:  

                break;  

            }  

  

        } else {  

            switch (type) {  

            case TYPE_1:  

                holder1 = (ViewHolder1) convertView.getTag();  

                break;  

            case TYPE_2:  

                holder2 = (ViewHolder2) convertView.getTag();  

                break;  

            case TYPE_3:  

                holder3 = (ViewHolder3) convertView.getTag();  

                break;  

            }  

        }  

        // 设置资源  

        switch (type) {  

        case TYPE_1:  

            holder1.rank1.setText("" + (position + 1));  

            holder1.time1.setText(ls.get(position).get("time").toString());  

            break;  

        case TYPE_2:  

            holder2.rank2.setText("" + (position + 1));  

            holder2.time2.setText(ls.get(position).get("time").toString());  

            holder2.totaldistance2.setText(ls.get(position)  

            break;  

        case TYPE_3:  

            holder3.rank3.setText("" + (position + 1));  

            holder3.time3.setText(ls.get(position).get("time").toString());  

            break;  

        }  

  

        return convertView;  

    }  

  

    public class ViewHolder1 {  

        TextView rank1;  

        TextView time1;  

    }  

  

    public class ViewHolder2 {  

        TextView rank2;  

        TextView time2;  

    }  

  

    public class ViewHolder3 {  

        TextView rank3;  

        TextView time3;  

    }  

}  

使用方式:

声明并定义自己的Adapter,在ListView中设置他的Adapter

private RunRankAdapter runRankAdapter;    

ArrayList<HashMap<String, Object>> runRank;    

ListView lv_runRank;  

runRank = new ArrayList<HashMap<String, Object>>();    

runRankAdapter = new RunRankAdapter(this, runRank);    

lv_runRank = (ListView) findViewById(R.id.lv_runRank);    

lv_runRank.setAdapter(runRankAdapter);  

还有一种方法:

在主布局文件中包含一个LinearLayout. 并且设置android:orientation="vertical"

定义两种不同的布局文件,然后代码中,根据不同条件调用.addview向LinearLayout加载就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: