现在的位置: 首页 > 综合 > 正文

在scrollview中嵌套GridView遇到的问题

2014年02月14日 ⁄ 综合 ⁄ 共 1691字 ⁄ 字号 评论关闭
在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();这句的话,第一次点击的时候还是会滑动到最上端。

抱歉!评论已关闭.