• Android ListView Adapter的getItemViewType和getViewTypeCount多种布局


    

    《Android ListView Adapter的getItemViewType和getViewTypeCount多种布局》

    在Android的ListView中。假设在一个ListView中要实现多种样式的ListView布局样式,则须要在ListView的适配器Adapter中用到:getItemViewType()和getViewTypeCount()。getViewTypeCount()告诉ListView须要载入多少种类型的Item View,getItemViewType()则告诉ListView在某一位置(position)的Item View样式是什么。


     现给出一个演示样例加以。说明,本例简单的以字母A、B、C。

    。。作为数据分组。然后每一个字母下有五个数据。


    如图:


    所有代码:

    package zhangphil.listview;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import android.app.ListActivity;
    import android.content.Context;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class MainActivity extends ListActivity {
    
    	// item view的类型总数。
    	private final int VIEW_TYPE_COUNT = 2;
    
    	private final String DATA = "data";
    	private final String TYPE = "type";
    
    	private final int GROUP = -2;
    	private final int ITEM = -3;
    
    	private ArrayList<HashMap<String, Object>> items = null;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    
    		ListView listView = this.getListView();
    
    		BaseAdapter adapter = new MyBaseAdapter();
    
    		items = new ArrayList<HashMap<String, Object>>();
    
    		listView.setAdapter(adapter);
    
    		// 如果我们演示以A,B,C,,,这种字符串作为分组的标签。

    // 每一组装载5个子数据。 String[] groups = { "A", "B", "C", "D", "E", "F" }; int count = 0; for (int i = 0; i < groups.length; i++) { HashMap<String, Object> group_map = new HashMap<String, Object>(); group_map.put(TYPE, GROUP); group_map.put(DATA, groups[i]); items.add(group_map); for (int j = 0; j < 5; j++) { HashMap<String, Object> data_map = new HashMap<String, Object>(); data_map.put(TYPE, ITEM); data_map.put(DATA, "数据:" + (count++)); items.add(data_map); } } } private class MyBaseAdapter extends BaseAdapter { private LayoutInflater inflater = null; public MyBaseAdapter() { inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { HashMap<String, Object> map = items.get(position); return map.get(DATA); } // 返回的id能够自己定制。

    @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); // 依据不同的view type载入不同的布局文件。 switch (type) { case GROUP: convertView = inflater.inflate( android.R.layout.simple_list_item_2, null); TextView tv1 = (TextView) convertView .findViewById(android.R.id.text1); tv1.setText("分组"); tv1.setBackgroundColor(Color.RED); TextView tv2 = (TextView) convertView .findViewById(android.R.id.text2); tv2.setText(getItem(position) + ""); tv2.setBackgroundColor(Color.GRAY); break; case ITEM: convertView = inflater.inflate( android.R.layout.simple_list_item_1, null); TextView tv = (TextView) convertView .findViewById(android.R.id.text1); tv.setText(getItem(position) + ""); break; } return convertView; } // 解析view type。

    // view type值是我们事先埋入到items数据集中的字段值。

    // 注意!此处返回的值不要大于getViewTypeCount()的返回值。

    @Override public int getItemViewType(int position) { HashMap<String, Object> map = items.get(position); return (Integer) map.get(TYPE); } // 在本例中共计有2个不同类型的view // android.R.layout.simple_list_item_1 和 // android.R.layout.simple_list_item_1. @Override public int getViewTypeCount() { return VIEW_TYPE_COUNT; } } }



  • 相关阅读:
    idea打开项目,没有项目文件,文件报红
    使用lombok自动生成链式调用
    gson常用的方式
    LOADING Redis is loading the dataset in memory Redis javaAPI实例
    redis.clients.jedis.exceptions.JedisDataException :READONLY You can't write
    Redis安装步骤
    springboot+jpa+mysql+redis+swagger整合步骤
    springboot+jpa+mysql+swagger2.0整合
    Daily Scrum 10.23
    Daily Scrum 10.22
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7215792.html
Copyright © 2020-2023  润新知