滚动视图中的Android列表视图
我有一个android布局,它有一个scrollView
和一些元素。 在scrollView
的底部,我有一个listView
,然后由适配器填充。
我遇到的问题是android从scrollView
排除了listView
,因为scrollView
已经有了可滚动的功能。 我想要的listView
是,只要内容和主滚动视图是滚动能。
我如何实现这种行为?
这是我的主要布局:
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:fillViewport="true"
android:gravity="top" >
<LinearLayout
android:id="@+id/foodItemActvity_linearLayout_fragments"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
然后以编程方式将我的组件添加到带有id: foodItemActvity_linearLayout_fragments
。 以下是加载到该线性布局的视图之一。 这是给我滚动卷轴的麻烦。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/fragment_dds_review_textView_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reviews:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ListView
android:id="@+id/fragment_dds_review_listView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
我的适配器然后填写这个列表视图。
当我点击主滚动视图时,这是来自android层次结构查看器的图像:
正如你所看到的,它不包括评论listView。
我应该可以向下滚动页面并查看8条评论,但是它只显示了那3条,我可以在评论所在的小部分上滚动。 我想要一个全局页面滚动
ScrollView问题中ListView的最短和最简单的解决方案。
您不必在layout.xml文件中做任何特殊处理,也不需要处理父ScrollView上的任何内容。 你只需要处理子ListView。 您还可以使用此代码在ScrollView中使用任何类型的子视图并执行Touch操作。
只需在你的java类中添加这些代码行:
ListView lv = (ListView) findViewById(R.id.layout_lv);
lv.setOnTouchListener(new OnTouchListener() {
// Setting on Touch Listener for handling the touch inside ScrollView
@Override
public boolean onTouch(View v, MotionEvent event) {
// Disallow the touch request for parent scroll on touch of child view
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
如果你把ListView放在一个ScrollView中,那么所有的ListView都不会伸展到它的全部高度 。 以下是解决此问题的方法。
/**** Method for Setting the Height of the ListView dynamically.
**** Hack to fix the issue of not showing all the items of the ListView
**** when placed inside a ScrollView ****/
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null)
return;
int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED);
int totalHeight = 0;
View view = null;
for (int i = 0; i < listAdapter.getCount(); i++) {
view = listAdapter.getView(i, view, listView);
if (i == 0)
view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT));
view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
totalHeight += view.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
要使用此方法,只需在此方法内传递ListView:
ListView list = (ListView) view.findViewById(R.id.ls);
setListViewHeightBasedOnChildren(list);
用于ExpandableListView - 信用Benny
ExpandableListView: view = listAdapter.getView(0, view, listView);
int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.MATCH_PARENT, View.MeasureSpec.EXACTLY);
int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.EXACTLY);
view.measure(widthMeasureSpec, heightMeasureSpec);
对于具有变量项目高度的ListView,请使用下面的链接:
ScrollView内的ListView不在Android上滚动
让图书馆直接在您的代码中实施 - 信用Paolo Rotolo
https://github.com/PaoloRotolo/ExpandableHeightListView
答案很简单,我很惊讶它还没有在这里回答。
在列表本身上使用Header View
或/和Footer View
。 不要将ScrollView
与ListView
或任何可以滚动的东西混合使用。 它的意思是与页眉和页脚一起使用:)
本质上,将所有内容放在ListView上面,将它放在另一个.xml文件中作为布局,然后在代码中将它充气并将其作为标题视图添加到列表中。
即
View header = getLayoutInflater().inflate(R.layout.header, null);
View footer = getLayoutInflater().inflate(R.layout.footer, null);
listView.addHeaderView(header);
listView.addFooterView(footer);
我知道它已经这么久了,但我也遇到了这个问题,试过这个解决方案并且它正在工作。 所以我想这也可以帮助其他人。
我在scrollView的layout xml中添加了android:fillViewport =“true”。 所以总体上我的ScrollView会是这样的。
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scrollView6"
android:fillViewport="true">
它对我来说就像魔术一样。 位于我的ScrollView中的ListView再次展开为其大小。
以下是ScrollView和ListView的完整示例代码。
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scrollView6" android:fillViewport="true">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
....
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv_transList" android:layout_gravity="top"
android:layout_marginTop="5dp"/>
....
</LinearLayout>
</ScrollView>
链接地址: http://www.djcxy.com/p/30557.html
上一篇: Android list view inside a scroll view
下一篇: How to change the image resource of a item clicked in a list view