BaseAdapter几个重载方法介绍isEnabled,getViewTypeCount ,getItemViewType

来源:互联网 发布:阿肆预谋邂逅 知乎 编辑:程序博客网 时间:2024/06/05 17:12

public boolean isEnabled (int position):如果列表的一项item是separator(充当分隔项目,跟其他item项一样,也可以不一样,但是无法进行点击),返回true,也就是可以点击,并接收响应事件。如果此时position处的item是separator的话,返回false,也就无法响应点击或触摸事件,此项目是不可以点击的,表现形式为点了没任何反应,可以充当一个列表中的分隔,当然可以自定义这个分隔项的布局。


public int getItemViewType (int position):以int数值型返回itemView的类型。一般普通列表的item都是一样的布局,也就是说这个列表只有一种类型,但是很多时候我们需要列表显示不同的item,比如有的列表有普通item和separator两种类型,item用于响应用户点击事件,separator用于分隔item,不可以点击,这样这个列表就有了两种类型,重载这个方法,如果当前位置是item,我们可以返回1,如果是separator我们可以返回2,以此类推。



public int getViewTypeCount ():以int数值类型返回列表拥有的itemview的个数,比如上例中,有两种类型的item,此方法返回2。
具体用法可以参照这个链接:http://android.amberfog.com/?p=296不过此链接的例子实现了不同item的布局,但是作为separator的item依然可以点击,在例子中重载isEnabled方法,当前位置如果为separator时,返回false即可。
理解了很久才想通,直到看到上面那个链接才明白。佩服至极,能如此地透彻理解!


Different list items’ layouts

Let’s move to the “more complicated” example. How about to add separator somewhere to the list.

You should do the following:

  1. Override getViewTypeCount() – return how many different view layouts you have
  2. Override getItemViewType(int) – return correct view type id by position
  3. Create correct convertView (depending on view item type) in getView


public class MultipleItemsList extends ListActivity {     private MyCustomAdapter mAdapter;     @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mAdapter = new MyCustomAdapter();        for (int i = 1; i < 50; i++) {            mAdapter.addItem("item " + i);            if (i % 4 == 0) {                mAdapter.addSeparatorItem("separator " + i);            }        }        setListAdapter(mAdapter);    }     private class MyCustomAdapter extends BaseAdapter {         private static final int TYPE_ITEM = 0;        private static final int TYPE_SEPARATOR = 1;        private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;         private ArrayList mData = new ArrayList();        private LayoutInflater mInflater;         private TreeSet mSeparatorsSet = new TreeSet();         public MyCustomAdapter() {            mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);        }         public void addItem(final String item) {            mData.add(item);            notifyDataSetChanged();        }         public void addSeparatorItem(final String item) {            mData.add(item);            // save separator position            mSeparatorsSet.add(mData.size() - 1);            notifyDataSetChanged();        }         @Override        public int getItemViewType(int position) {            return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;        }         @Override        public int getViewTypeCount() {            return TYPE_MAX_COUNT;        }         @Override        public int getCount() {            return mData.size();        }         @Override        public String getItem(int position) {            return mData.get(position);        }         @Override        public long getItemId(int position) {            return position;        }         @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder = null;            int type = getItemViewType(position);            System.out.println("getView " + position + " " + convertView + " type = " + type);            if (convertView == null) {                holder = new ViewHolder();                switch (type) {                    case TYPE_ITEM:                        convertView = mInflater.inflate(R.layout.item1, null);                        holder.textView = (TextView)convertView.findViewById(R.id.text);                        break;                    case TYPE_SEPARATOR:                        convertView = mInflater.inflate(R.layout.item2, null);                        holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);                        break;                }                convertView.setTag(holder);            } else {                holder = (ViewHolder)convertView.getTag();            }            holder.textView.setText(mData.get(position));            return convertView;        }     }     public static class ViewHolder {        public TextView textView;    }}

原创粉丝点击