在scrollview中嵌套GridView遇到的问题

在scrollview中嵌套GridView,遇到如下两个问题:
1、GridView的内容不能显示全,只显示一部分。
解决方法:继承GridView重写onMeasure方法:
package com.bonc.businessmanager.view;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
/**
* 重新onMeasure方法,使gridview的内容宽高有多少就填充多少
* 备注:在此项目中,用来解决当scrollview嵌套gridview时,gridview内容只显示一半
* @author HHF
*
*/
public class MyGridView extends GridView {
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public MyGridView(Context context) {
super(context);
}

public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int expandSpec = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
2、点击GridView中某个item时,页面会滑动到最上端
解决方法:这个问题问了很多人,他们都说在scrollview中嵌套gridview是不合理。但是我又想不到其他更好的方法实现,最后只好用个笨办法解决。
(1)、通过监听scrollview的OnTouchListener来得到滑动的X、Y.

sv = (ScrollView) this.findViewById(R.id.scrollView1);
sv.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_UP){

//可以监听到ScrollView的滚动事件
scrollY = sv.getScrollY();
scrollX = sv.getScrollX();
}
return false;
}
});

(2)、在gridview的onItemSelectListener中设置scroll的位置:

business_gv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
businessClickCount ++ ;
busPackAdpater.changeState(position);
if(businessClickCount == 1){
business_gv.requestFocus();
mHandler.post(new Runnable() {
@Override
public void run() {
sv.scrollTo(scrollX, scrollY);
}
});

}
selectBusinessPosition = position;
}
});

但是,如果不加上business_gv.requestFocus();这句的话,第一次点击的时候还是会滑动到最上端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值