ListActivity之ListAdapter

本文详细介绍了如何通过继承ListAdapter来创建自定义列表适配器,并解决列表项点击事件不起作用的问题。通过重写关键方法,如getCount(), getView(), getViewTypeCount()等,实现列表项的正确显示。最后,通过修改ListAdapter的两个方法areAllItemsEnabled()和isEnabled()的返回值,解决了点击事件无法触发的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        想写一个列表界面,但因为列表的内容比较多,不想在Java文件中一项一项列出来;也因为有规律可以循,比如第一天,第二天,第三天,等等叠加的数据;索性就自己继承一个ListAdapter来做。

        其实很简单,写好构造方法,重写getCount()、getView()和getViewTypeCount()方法就可以直观的显示出来了。

    private class IndexAdapter implements ListAdapter {

        Context mContext;
        LayoutInflater mInflater;
        
        public IndexAdapter(Context context) {
            this.mContext = context;
            mInflater = LayoutInflater.from(context);
        }

        public int getCount() {
            // TODO Auto-generated method stub
            return INDEX_NUM;
        }

       
        public int getViewTypeCount() {
            // TODO Auto-generated method stub
            return 1;//你的item项里有几种view就返回几

        }

        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            TextView item;
            convertView = mInflater.inflate(R.layout.index_item, null);
            item = (TextView)convertView.findViewById(R.id.item);
            item.setText(xxx);           
            return convertView;
        }

       ......//其它自动重载的方法

    }


        为了处理每个列表项的点击事件呢,又给这个ListActivity重写了onListItemClick方法。可惜,重载完之后,怎么都不起作用,加上log一看,根本没有走。郁闷坏了,网上到处找原因,能找到的方法只有,将列表项中能自动获得焦点的view设置为不能获得焦点,比如checkbox或button等view,即:

    checkbox.setFocusableInTouchMode(false);                            
    checkbox.setFocusable(
false);

        可是,依然无果,何况我的列表项中只有一个TextView,也不会自动获得焦点,只好返回去再仔细看代码,发现了问题所在。

        public boolean areAllItemsEnabled() {
            // TODO Auto-generated method stub
            return true;
        }

        public boolean isEnabled(int arg0) {
            // TODO Auto-generated method stub
            return true;
        }

        ListAdapter的这两个方法,如果是自动重载,它们返回的都是false,一定要改为true,这样一改,问题搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值