• Android中ListView分类


    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
        android:orientation = "vertical"
        android:layout_width = "fill_parent"
        android:layout_height = "fill_parent"
        >
        <ListView
            android:id = "@+id/categoryList"
            android:layout_width = "fill_parent"
            android:layout_height = "fill_parent"
            />
    </LinearLayout>&nbsp;
    
    分类Title实现:
    
    <?xml version="1.0" encoding="utf-8"?>
    <TextView
        xmlns:android = "http://schemas.android.com/apk/res/android"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:minHeight = "30dip"
        android:gravity = "center_vertical"
        android:paddingLeft = "10dip"
        android:background = "@color/title_background_color"
        />&nbsp;
    
    package com.flora;
    import android.widget.Adapter;
    public class Category {
        private String mTitle;
         
        private Adapter mAdapter;
        public Category(String title, Adapter adapter) {
            mTitle = title;
            mAdapter = adapter;
        }
         
        public void setTile(String title) {
            mTitle = title;
        }
         
        public String getTitle() {
            return mTitle;
        }
         
        public void setAdapter(Adapter adapter) {
            mAdapter = adapter;
        }
         
        public Adapter getAdapter() {
            return mAdapter;
        }
         
    }&nbsp;
    
    package com.flora;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    public class ListViewCategoryActivity extends Activity {
         
        private String [] mContacts = {"马英才", "张三", "李四"};
        private String [] mMusic = {"素顔", "庐州月", "半城烟沙"};
        private String [] mEBook = {"拆掉思维里的墙", "淡定力", "人脉决定命脉"};
         
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
             
            mCategoryAdapter.addCategory("人名", new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mContacts));
             
            mCategoryAdapter.addCategory("音乐",new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mMusic));
             
            mCategoryAdapter.addCategory("书籍",new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mEBook));
             
            ListView categoryList = (ListView) findViewById(R.id.categoryList);
             
            categoryList.setAdapter(mCategoryAdapter);
        }
         
        private CategoryAdapter mCategoryAdapter = new CategoryAdapter() {
            @Override
            protected View getTitleView(String title, int index, View convertView, ViewGroup parent) {
                TextView titleView;
                 
                if (convertView == null) {
                    titleView = (TextView)getLayoutInflater().inflate(R.layout.title, null);
                } else {
                    titleView = (TextView)convertView;
                }
                 
                titleView.setText(title);
                 
                return titleView;
            }
        };
         
    }
    
    package com.flora;
    import java.util.ArrayList;
    import java.util.List;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Adapter;
    import android.widget.BaseAdapter;
    public abstract class CategoryAdapter extends BaseAdapter {
        private List<Category> categories = new ArrayList<Category>();
         
        public void addCategory(String title, Adapter adapter) {
            categories.add(new Category(title, adapter));
        }
         
        @Override
        public int getCount() {
            int total = 0;
             
            for (Category category : categories) {
                total += category.getAdapter().getCount() + 1;
            }
             
            return total;
        }
        @Override
        public Object getItem(int position) {
            for (Category category : categories) {
                if (position == 0) {
                    return category;
                }
                 
                int size = category.getAdapter().getCount() + 1;
                if (position < size) {
                    return category.getAdapter().getItem(position-1);
                }
                position -= size;
            }
             
            return null;
        }
        @Override
        public long getItemId(int position) {
            return position;
        }
         
        public int getViewTypeCount() {
            int total = 1;
             
            for (Category category : categories) {
                total += category.getAdapter().getViewTypeCount();
            }
             
            return total;
        }
        public int getItemViewType(int position) {
            int typeOffset = 1;
             
            for (Category category : categories) {
                if (position == 0) {
                    return 0;
                }
                 
                int size = category.getAdapter().getCount() + 1;
                if (position < size) {
                    return typeOffset + category.getAdapter().getItemViewType(position - 1);
                }
                position -= size;
                 
                typeOffset += category.getAdapter().getViewTypeCount();
            }
             
            return -1;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            int categoryIndex = 0;
             
            for (Category category : categories) {
                if (position == 0) {
                    return getTitleView(category.getTitle(), categoryIndex,convertView, parent);
                }
                int size = category.getAdapter().getCount()+1;
                if (position < size) {
                    return category.getAdapter().getView(position - 1, convertView, parent);
                }
                position -= size;
                 
                categoryIndex++;
            }
             
            return null;
        }
         
        protected abstract View getTitleView(String caption,int index,View convertView,ViewGroup parent);
         
    }&nbsp;
  • 相关阅读:
    移动端前端开发模型
    swift中高阶函数map、flatMap、filter、reduce
    函数式编程-构建
    Swift 4.0:访问级别(访问控制)
    swift内存管理
    swift where 的作用
    Swift 中的协议
    swift语言点评二十一-协议
    swift语言点评二十-扩展
    swift 20
  • 原文地址:https://www.cnblogs.com/linximeng/p/3909118.html
Copyright © 2020-2023  润新知