ScrollView 中放ListView是避免不了的,网上有种靠谱的方法,我用过觉得很不错。
ListView
package com.work.driver.view;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
/**
* @project a_driver
* @ClassName NoScrollListView.java
* @Description 可以放入ScrollView的ListView
* @author xugang
* @date 2015-9-23 上午1:06:58
*/
public class NoScrollListView extends ListView {
public NoScrollListView(Context context) {
super(context);
}
public NoScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NoScrollListView(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);
}
}
GridView
package com.work.driver.view;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
/**
* @project a_driver
* @ClassName NoScrollGridView.java
* @Description 嵌套在listView 中的GridView
* @author xugang
* @date 2015-9-23 下午12:56:43
*/
public class NoScrollGridView extends GridView {
public NoScrollGridView(Context context) {
super(context);
}
public NoScrollGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NoScrollGridView(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);
}
}
但是这样有问题,当数据很多的时候,ListView或者GridView上面的View会滑出屏幕,这里需要写三行代码,找到上面的任意一个View:
View view = findViewById(R.id.textView1);// find view
view.setFocusable(true);
view.setFocusableInTouchMode(true);
view.requestFocus();
本文介绍了一种在ScrollView中嵌套ListView或GridView的方法,并提供了解决方案的Java代码实现。这种方法通过重写ListView和GridView的onMeasure方法来适应ScrollView,同时指出了当数据量较大时可能出现的问题及解决思路。
599

被折叠的 条评论
为什么被折叠?



