实现多效果ListView
来源:互联网 发布:穿着舒服的女鞋 知乎 编辑:程序博客网 时间:2024/05/22 17:32
某些时候我们需要实现在一个列表中有不同的类型的行,也就是不同项需要有不同的效果,为了实现这个效果,主要在适配器中进行操作例如其中的getItemViewType
,getViewTypeCount
。
实现
首先我们要记住虽然没项表现不同但是需要有一个基本的modle,因此第一布就是创造一个足够灵活的modle来支持各种类型,以及内置一个机制来确定各种类型,下面是一个不同颜色的例子
- 创建一个
SimpleColor
的类,需要包含显示的颜色和内容的属性
public class SimpleColor { public enum ColorValues {RED, BLUE, GREEN}//枚举 public SimpleColor(String label, ColorValues color) { super(); this.label = label; this.color = color; } public String label; public ColorValues color;}
我们利用枚举类限定了每项的颜色,用label表示每项的标签,然后我们需要一个适配器
public class ColorArrayAdapter extends ArrayAdapter<SimpleColor> { public ColorArrayAdapter(Context context, ArrayList<SimpleColor> objects) { super(context, 0, objects); } //返回view的类型数量,创造者是getView(int, View, ViewGroup) @Override public int getViewTypeCount() { //每种类型都代表了可以被转换view的集合 //values()方法反悔了一个数组 return SimpleColor.ColorValues.values().length; } //得到将会由getView创造的view的种类 @Override public int getItemViewType(int position) { //返回代表vie种类的整数,注意:范围是0~getViewTypeCount()-1 //通过获取枚举类型的序列返回代表类型的整数 return getItem(position).color.ordinal(); } //得到在指定位置展示指定数据的view @Override public View getView(int position, View convertView, ViewGroup parent) { //view应该是基于getItemViewType的类型创造的,并且convertView要保证回收再利用的类型 //是正确的 SimpleColor color = getItem(position); if (convertView == null) { //得到数据项的类型 int type = getItemViewType(position); //基于类型加载XML文件 convertView = getInflatedLayoutForType(type); } //加载控件 TextView tvLabel = (TextView) convertView.findViewById(R.id.tvLable); if (tvLabel != null) { tvLabel.setText(color.label); } return convertView; } //根据项的类型,返回相应的布局文件 private View getInflatedLayoutForType(int type) { if (type == SimpleColor.ColorValues.BLUE.ordinal()) { return LayoutInflater.from(getContext()).inflate(R.layout.item_blue_color, null); } else if (type == SimpleColor.ColorValues.RED.ordinal()) { return LayoutInflater.from(getContext()).inflate(R.layout.item_blue_color, null); } else if (type == SimpleColor.ColorValues.GREEN.ordinal()) { return LayoutInflater.from(getContext()).inflate(R.layout.item_green_color, null); } else { return null; } }}
一旦viewType确定了,converyView
对象就会保证是相对应的布局,在主活动中
public class MainActivity extends AppCompatActivity { private ListView lvColors; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvColors = (ListView) findViewById(R.id.lvColors); ArrayList<SimpleColor> aColors = new ArrayList<>(); //像数组中存入数据 aColors.add(new SimpleColor("Blue", SimpleColor.ColorValues.BLUE)); aColors.add(new SimpleColor("Green", SimpleColor.ColorValues.GREEN)); //绑定适配器 ColorArrayAdapter adapter = new ColorArrayAdapter(this,aColors); lvColors.setAdapter(adapter);
0 0
- 实现多效果ListView
- listView实现阻尼效果
- RecyclerView实现Listview效果
- ListView 实现类似listview + scrollview滚动效果
- ListView嵌套ListView实现论坛评论效果
- Listview嵌套Listview实现评论效果
- javascript实现的listview效果
- listview 拖动item效果实现
- Android 圆角ListView效果实现
- Android RecyclerView实现listview效果
- Android ListView 分组效果实现
- ListView实现公告切换效果
- 实现listview单选效果
- ListVIew实现预加载效果
- ListView滑动删除效果实现
- 继承ListView实现弹性效果
- ListView实现头部悬停效果
- EditText+ListView实现AutoCompleteTextView效果
- 文章标题
- 样本不同特征构成的协方差矩阵
- Linux下双网卡绑定
- Linux_mount命令的使用
- 中文稿
- 实现多效果ListView
- display和visibility的区别
- android异步处理,分析Handle消息机制
- android 笔记11 得到布局,状态栏显示隐藏,代码优化
- FastJSON、Gson和Jackson性能对比
- Leetcode 24. Swap Nodes in Pairs (Easy) (cpp)
- ScrollView的使用
- 【最小圆覆盖】【未完待续。。】
- 高性能java实现不同服务器直接的数据库迁移。