让自己陷入困境,尝试在同一个活动中挤压两个ListView。它工作,使用标准(垂直)LinearLayout中包含的两个单独的ListFragments。
问题是,两个列表一起比屏幕长,因此第二个列表部分隐藏。在视觉上,用户希望向上拖动整个屏幕并揭开第二个列表。但是这两个列表都有自己的内部滚动,并且它们不允许整个屏幕作为一个整体滚动。
幸运的是,这些列表实际上包含很少的项目(平均每个项目5个)。因此,理论上,我可以填充一些LinearLayouts容器。问题是,列表显示的数据来自Cursor并且是动态的。虽然我知道CursorAdapter的newView()和bindView()方法,但我不太明白如何将适配器连接到LinearLayout容器而不是ListViews。即CursorAdapter如何知道它必须在它在光标中找到的5个项目中创建5个行项目?我在哪里创建循环遍历游标项并在LinearLayout容器中创建项的循环?当光标中的数据发生变化时,如何刷新LinearLayout的内容?我发现的所有示例都巧妙地将这些问题包装到ListActivity提供的ListView中,但我不能使用ListViews!
我很困惑!
马努
编辑:以下是关注breceivemail建议时(片段)活动的xml布局。在breceivemail的建议之前,注释掉了原始的LinearLayout容器。还应该注意的是整个活动反过来由TabHost包含,但我不知道这是否会对手头的问题产生任何影响。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<!--
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
-->
<TextView android:id="@+id/title"
android:textSize="36sp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/SelectPlayer"/>
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/Playing"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="#000000"
android:background="#999999"/>
<fragment android:name="com.myDomain.myApp.PlayerListFragment"
android:id="@+id/playing"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/Reserve"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="#000000"
android:background="#999999"/>
<fragment android:name="com.myDomain.myApp.PlayerListFragment"
android:id="@+id/reserve"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
答案 0 :(得分:0)
将listViews放在垂直滚动中。您可以通过以下技巧在垂直滚动内部使用可滚动的listView。使用以下代码享受!
private int listViewTouchAction;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
setListViewScrollable(myListView1);
setListViewScrollable(myListView2);
}
private void setListViewScrollable(final ListView list) {
list.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
listViewTouchAction = event.getAction();
if (listViewTouchAction == MotionEvent.ACTION_MOVE)
{
list.scrollBy(0, 1);
}
return false;
}
});
list.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view,
int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (listViewTouchAction == MotionEvent.ACTION_MOVE)
{
list.scrollBy(0, -1);
}
}
});
}
listViewTouchAction是一个全局整数值。