ListView嵌套GridView出现的问题及解决方法

ListView嵌套GridView会出现很多问题,下面一一列举出现的问题,以及解决的方法。

一、准备工作

首先说一下commonAdapter。github上有很多封装好的,好用又通用adapter,这里就不详细介绍了。

二、遇到的坑

1.gridview条目显示不全

既然显示不全,就自定义一个gridview,让所有的条目都显示出来。

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (haveScrollbar == false) {
            int expandSpec = MeasureSpec.makeMeasureSpec(
                    Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);
        } else {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }

这里的做法是设置gridview是否可以滑动。禁止滑动,就让所有条目都显示;可以滑动,就会出现显示不全,但是滑动的时候可以显示隐藏的条目。

2.gridview的点击事件冲突

在listview的根布局添加一个属性

android:descendantFocusability="blocksDescendants"

这个属性有三个值可以选,有兴趣自己去摸索。这里设置的属性意思是,如果出现事件冲突,子类响应此事件。
此外,还有gridview设置

//让GridView的item点击事件有效
mGvInviteMember.setClickable(false);
mGvInviteMember.setPressed(false);
mGvInviteMember.setEnabled(false);

3.点击事件如何设置

这个问题想想不知道咋解决,其实却很容易解决。
首先在listview的adapter里设置监听,

mGridViewAdapter.setItemClickListener((Activity) mContext);
//GridView的适配器
public class StudentStatusAdapter extends CommonAdapter<UserInfo> {

    public StudentStatusAdapter(Context context, int layoutId) {
            super(context, layoutId);
            mContext = context;
        }

        @Override
        public void convert(ViewHolder vh, UserInfo item) {
            vh.setItemOnClickListener(R.id.rl_grid_view, item, this);
        }
    }

然后在Activity里实现点击方法就ok了,同时能选择要传递的数据。

4.listview滑动的时候卡顿

这个时候需要优化了,如果使用了commonAdapter,viewholder封装在里面,复用什么的就不说。但是仍然卡顿,主要是gridview的adapter每次都创建一个新的,复用就好了。

mGvInviteMember.setHaveScrollbar(false);//禁止滑动
if (mGridViewAdapter==null) {
    mGridViewAdapter = new StudentStatusAdapter(mContext,
            R.layout.item_grid_view);
}
mGridViewAdapter.setItemsData(lists);
mGvInviteMember.setAdapter(mGridViewAdapter);

注意:这里没有使用notifyDataSetChanged方法。因为这里只是复用创建的adapter,但是其数据源有变化。不懂的自行百度去。

5.GridView的columnNum问题

这个问题跟标题木有关系,只是自己遇到的坑。

-通过 GridView的getnumcolumn方法不能得到正确的值。具体原因自己去看源码。
-解决方法:设置strings.xml,通过系统的方法获取strings值

this.getString(R.string.numColumns);
mContext.getResources().getString(R.string.numColumns);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值