我想设置listview以显示所有没有滚动的项目 以下是我的布局:
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Large Text"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceLarge" />
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Large Text"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
线性布局属于滚动视图 所以我想设置列表视图所有项目并按父项滚动滚动 我该怎么做?
答案 0 :(得分:5)
这就是你应该如何在scrollView中设置listview,但就像其他人的回答一样,你不应该把一个listview放在一个scrollview中,特别是如果listview将包含很多项目
ListView lv = (ListView)findViewById(R.id.list); // your listview inside scrollview
lv.setOnTouchListener(new ListView.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
int action = event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
// Handle ListView touch events.
v.onTouchEvent(event);
return true;
}
});
答案 1 :(得分:3)
如果此要求的原因与我需要的相似,则下面的课程可以提供帮助。它是一个替换ListView
,它可以观察适配器及其更改并做出相应的反应,但实际上使用了手动填充的LinearLayout
。我想我在网上的某个地方找到了这个代码,但我现在无法找到它以便链接到它。
我的要求是利用ListView
的优势,即其适配器功能,在页面上显示很少的项目(1到5),可能有多个这样的替换ListView
在一个屏幕上。一旦显示,元素本身就会成为较大页面的一部分,因此它们不会在自己的ListView
内单独滚动,而是整个页面滚动。
public class StaticListView extends LinearLayout {
protected Adapter adapter;
protected Observer observer = new Observer(this);
public StaticListView(Context context) {
super(context);
}
public StaticListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setAdapter(Adapter adapter) {
if (this.adapter != null)
this.adapter.unregisterDataSetObserver(observer);
this.adapter = adapter;
adapter.registerDataSetObserver(observer);
observer.onChanged();
}
private class Observer extends DataSetObserver {
StaticListView context;
public Observer(StaticListView context) {
this.context = context;
}
@Override
public void onChanged() {
List<View> oldViews = new ArrayList<View>(context.getChildCount());
for (int i = 0; i < context.getChildCount(); i++)
oldViews.add(context.getChildAt(i));
Iterator<View> iter = oldViews.iterator();
context.removeAllViews();
for (int i = 0; i < context.adapter.getCount(); i++) {
View convertView = iter.hasNext() ? iter.next() : null;
context.addView(context.adapter.getView(i, convertView, context));
}
super.onChanged();
}
@Override
public void onInvalidated() {
context.removeAllViews();
super.onInvalidated();
}
}
}
答案 2 :(得分:2)
不要将listview放在滚动视图中。
http://developer.android.com/reference/android/widget/ScrollView.html
从文档引用 您永远不应该使用带有ListView的ScrollView,因为ListView负责自己的垂直滚动。最重要的是,这样做会使ListView中的所有重要优化都无法处理大型列表,因为它有效地强制ListView显示其整个项目列表以填充ScrollView提供的无限容器。
您可以将textview作为页眉和页脚添加到listview。
http://developer.android.com/reference/android/widget/ListView.html
检查上述链接中的页眉和页脚方法
您可以在顶部和底部添加相对布局添加文本视图。相对于textview具有textview的
之间的列表视图<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="TextView1" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_alignParentBottom="true"
android:text="TextView1" />
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/textView1"
android:layout_above="@+id/textView2"
>
</ListView>
</RelativeLayout>
答案 3 :(得分:2)
我认为这是不可能的。如果我们使用父布局滚动覆盖列表视图滚动行为,则列表视图无法正常工作。