这是我的xml布局文件,其中我使用scrollview作为父级,其中列表视图丢失了它们的滚动属性。请指示我该怎么做..为什么listview默认丢失了它们的滚动属性
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:fillViewport="true"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerHorizontal="true"
android:layout_marginRight="10dp"
android:text="Edit Order"
android:layout_marginTop="5dp"
android:id="@+id/txtyourOrder"
android:textColor="@android:color/holo_green_dark" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your Order"
android:layout_marginLeft="10dp"
android:textColor="@android:color/black"
android:textSize="20sp" />
<View
android:id="@+id/view1"
android:layout_below="@id/txtyourOrder"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_marginTop="10dp"
android:background="@android:color/darker_gray" />
<ListView
android:layout_below="@id/view1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="true"
android:layout_marginTop="10dp"
android:id="@+id/listview"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_below="@id/listview"
android:id="@+id/txtAddItems"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginTop="10dp"
android:text="Add Items"
android:textColor="@android:color/holo_green_dark" />
</android.support.v4.widget.NestedScrollView>
请帮助我!
答案 0 :(得分:1)
根据定义here ..
您不应该将ListView放在ScrollView中,因为ListView类实现了自己的滚动,它只是不接收手势,因为它们都由父ScrollView处理。我强烈建议你以某种方式简化你的布局。例如,您可以将要滚动的视图添加到ListView作为页眉或页脚。
答案 1 :(得分:1)
如果你想使用ListView,只需使用Co-Ordinator布局作为root,并根据它设计你的布局。
你也可以像这样在ListView上添加标题:
LayoutInflater inflater = getLayoutInflater();
ViewGroup headerView = (ViewGroup)inflater.inflate(R.layout.header,
listview, false);
myListView.addHeaderView(headerView, null, false);
答案 2 :(得分:1)
最短和最短的ScrollView问题中ListView的最简单解决方案。
您不必在layout.xml文件中执行任何特殊操作,也不必处理父ScrollView上的任何内容。您只需处理子ListView。您还可以使用此代码在ScrollView&amp;中使用任何类型的子视图。执行触摸操作。
只需在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);