1

讓我自己陷入一個泡菜試圖擠壓在同一活動中的兩個ListViews。它的工作原理是使用包含在標準(垂直)LinearLayout中的兩個單獨的ListFragments。與兩個ListViews滾動,試圖填充LinearLayout而不是

問題是,兩個列表一起比屏幕長,第二個列表因此部分隱藏。在視覺上,用戶期望拖動整個屏幕並揭示第二個列表。但是這兩個列表都有自己的內部滾動功能,並且不允許整個屏幕滾動爲一個整體。

幸運的是,列表實際上只包含很少的項目(平均每個項目5個)。因此,理論上,我可以填充一些LinearLayouts容器。問題是,列表顯示的數據來自Cursor並且是動態的。雖然我知道CursorAdapter的newView()和bindView()方法,但我不太瞭解如何將適配器連接到LinearLayout容器而不是ListViews。即CursorAdapter如何知道它必須在其光標中找到的5個項目中創建5個行項目?我在哪裏創建遍歷遊標項目並在LinearLayout容器中創建項目的循環?當光標中的數據發生變化時,如何刷新LinearLayout的內容?我找到的所有示例都將這些問題整齊地包裝到由ListActivity提供的ListView中,但我無法使用ListView!

我很困惑!

馬努

編輯:這裏是(片段)活性的下列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

這不是一個更好的解決方案,只是創建您的佈局,所以兩個ListView適合屏幕尺寸? – kaspermoerch

+0

這是一個公平的評論@KasperMoerch,但列表項的高度是非常大的設計。列表中的項目需要很快被使用,尤其是第一個列表中的項目,這是一個用戶界面原則,越大的事情越快到達並與之交互。 – manu3d

+0

這是公平的 - 但ListView的一般意義在於它是可滾動的,這意味着您可以滾動到列表中的所需點,這也意味着如果您在一個屏幕中有兩個ListView,它們只需佔用一半每個屏幕。我覺得你正在做某種遊戲,這很酷。你不應該認爲這是批評或者我是固執的 - 我只是試圖挑戰你選擇的UI設計。有可能不是一個更好的解決方案。 – kaspermoerch

回答

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是一個全局整數值。

+0

親愛的@breceivemail,謝謝你的努力。不幸的是,這似乎並不奏效。該代碼是功能性的,但與我添加到原始文章中的佈局一起,它只使兩個列表視圖更短,並且仍保留其內部滾動。沒有滾動作爲單個視圖。此外,每當我拖動一個列表時,它會顯示越來越少的項目視圖,最終完全消失,所有項目都隱藏起來。 問題:當你寫關於listViewTouchAction變量的時候,你的意思是活動全局還是應用全局? – manu3d

+0

我已經在華碩Eee,Gallagxy選項卡和所有的模擬器上進行了測試。 – breceivemail

相關問題