ListView里item加载多种布局文件
2015-04-08 16:18
218 查看
国际惯例 先上图
这里加载了3种布局,第一种是checkbox加textview 第二种是textview 第三种是imageview加textview
写3个item布局文件 在main布局里加载一个listview 贴代码
原理就是重写Adapter里面的getView方法。
这里加载了3种布局,第一种是checkbox加textview 第二种是textview 第三种是imageview加textview
写3个item布局文件 在main布局里加载一个listview 贴代码
原理就是重写Adapter里面的getView方法。
package com.example.testmixlistview; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { ListView listView; MyAdapter listAdapter; ArrayList liststring; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)this.findViewById(R.id.listview); liststring = new ArrayList(); for (int i = 0; i < 100; i++) { liststring.add(Integer.toString(i)); } listAdapter = new MyAdapter(this); listView.setAdapter(listAdapter); } class MyAdapter extends BaseAdapter { 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 MyAdapter(Context context) { mContext = context; inflater = LayoutInflater.from(mContext); } @Override public int getItemViewType(int position) { int p = position%6; if(p == 0) return TYPE_1; else if(p < 3) return TYPE_2; else if(p < 6) return TYPE_3; else return TYPE_1; } @Override public int getViewTypeCount() { return 3; } @Override public int getCount() { return liststring.size(); } @Override public Object getItem(int arg0) { return liststring.get(arg0); } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getView(int position, View convertView, ViewGroup parent) { viewHolder1 holder1 = null; viewHolder2 holder2 = null; viewHolder3 holder3 = null; int type = getItemViewType(position); //无convertView,需要new出各个控件 if (convertView == null) { Log.e("convertView = ", " NULL"); // 按当前所需的样式,确定new的布局 switch (type) { case TYPE_1: convertView = inflater.inflate(R.layout.listitem1, parent, false); holder1 = new viewHolder1(); holder1.textView = (TextView) convertView .findViewById(R.id.textview1); holder1.checkBox = (CheckBox) convertView .findViewById(R.id.checkbox); Log.e("convertView = ", "NULL TYPE_1"); convertView.setTag(holder1); break; case TYPE_2: convertView = inflater.inflate(R.layout.listitem2, parent, false); holder2 = new viewHolder2(); holder2.textView = (TextView) convertView .findViewById(R.id.textview2); Log.e("convertView = ", "NULL TYPE_2"); convertView.setTag(holder2); break; case TYPE_3: convertView = inflater.inflate(R.layout.listitem3, parent, false); holder3 = new viewHolder3(); holder3.textView = (TextView) convertView .findViewById(R.id.textview3); holder3.imageView = (ImageView) convertView .findViewById(R.id.imageview); Log.e("convertView = ", "NULL TYPE_3"); convertView.setTag(holder3); break; } } else { switch (type) { case TYPE_1: holder1 = (viewHolder1) convertView.getTag(); Log.e("convertView !!!!!!= ", "NULL TYPE_1"); break; case TYPE_2: holder2 = (viewHolder2) convertView.getTag(); Log.e("convertView !!!!!!= ", "NULL TYPE_2"); break; case TYPE_3: holder3 = (viewHolder3) convertView.getTag(); Log.e("convertView !!!!!!= ", "NULL TYPE_3"); break; } } switch (type) { case TYPE_1: holder1.textView.setText(Integer.toString(position)); holder1.checkBox.setChecked(true); break; case TYPE_2: holder2.textView.setText(Integer.toString(position)); break; case TYPE_3: holder3.textView.setText(Integer.toString(position)); holder3.imageView.setBackgroundResource(R.drawable.ic_launcher); break; } return convertView; } } } class viewHolder1 { CheckBox checkBox; TextView textView; } class viewHolder2 { TextView textView; } class viewHolder3 { ImageView imageView; TextView textView; }
相关文章推荐
- javascript中动态加载js文件多种解决办法
- Android中关于布局文件延迟加载控件ViewStub
- android activity加载布局文件后,组件为空java.lang.NullPointerException
- 安卓中加载布局文件的三种方法
- android动态加载布局文件示例
- 不同的布局文件怎么加载到一个activity中
- Android 加载键盘布局文件过程
- Android 根据不同的屏幕,加载不同的布局文件 使用refs.xml
- Inflate加载布局文件
- Android布局文件的加载过程分析:Activity.setContentView()源码分析
- Listview 中自定义加载布局文件
- AndEngine中引用布局文件example.lvl——实现场景的加载
- 自定义adapter 无法加载layout中布局文件的原因
- Android学习笔记_31_通过后台代码生成View对象以及动态加载XML布局文件到LinearLayout
- Android 加载布局文件的几种方式
- android listview item 加载不同的布局样式文件
- Android Honeycomb加载键盘布局文件过程
- android使用include加载其他xml文件中的布局
- Android 加载键盘布局文件过程
- Inflate加载布局文件