2016-08-23 43 views
0

我在NestedScrollView內使用ListView,但在ListView中看不到超過1個項目。我可以滾動到TextViewtextContact)的末尾,但不能在ListViewlistContact)內滾動。無法在其父級NestedScrollView中滾動ListView - Android

下面是.xml文件的代碼:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
    ... > 
    <android.support.design.widget.CoordinatorLayout 
     ... >  
     <LinearLayout 
      ... 
      android:orientation="vertical"> 

      <android.support.v7.widget.Toolbar 
       ... /> 
      <android.support.v4.widget.NestedScrollView 
       ... > 
       <LinearLayout 
        ... 
        android:orientation="vertical"> 

        <TextView 
         android:id="@+id/textContact" 
         ... /> 
        <LinearLayout 
         ... 
         android:orientation="vertical"> 
         <ListView 
          android:id="@+id/listContact" 
          ... /> 
        </LinearLayout> 
       </LinearLayout> 

      </android.support.v4.widget.NestedScrollView> 

     </LinearLayout> 

    </android.support.design.widget.CoordinatorLayout> 

    <android.support.design.widget.NavigationView 
     ... /> 

</android.support.v4.widget.DrawerLayout> 

是否有任何設計問題,這裏使用的小工具/控制的任何兼容性問題,還是別的?

回答

2

您需要啓用NestedScrollView內的以下兩個屬性,

<android.support.v4.widget.NestedScrollView xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/scrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

然後使用一個輔助類擴展的ListView寬度&修復滾動功能,

import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListAdapter; 
import android.widget.ListView; 

public class Helper { 
    public static void getListViewSize(ListView myListView) { 
     ListAdapter myListAdapter = myListView.getAdapter(); 
     if (myListAdapter == null) { 
      //do nothing return null 
      return; 
     } 
     //set listAdapter in loop for getting final size 
     int totalHeight = 0; 
     for (int size = 0; size < myListAdapter.getCount(); size++) { 
      View listItem = myListAdapter.getView(size, null, myListView); 
      listItem.measure(0, 0); 
      totalHeight += listItem.getMeasuredHeight(); 
     } 
     //setting listview item in adapter 
     ViewGroup.LayoutParams params = myListView.getLayoutParams(); 
     params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1)); 
     myListView.setLayoutParams(params); 
     // print height of adapter on log 
     Log.i("height of listItem:", String.valueOf(totalHeight)); 
    } 
} 

要使用助手類,同時設置ListView適配器,

listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listview_array)); 
       Helper.getListViewSize(listView); 

PS:確保您已經爲您的項目添加了支持設計庫。

compile 'com.android.support:design:23.4.0' 
+0

哪個** LinearLayout **應該具有這些屬性? 1.以上工具欄 2.以下NestedScrollView 3.外部ListView 哪個LinearLayout? –

+0

其中包含ListView –

+1

它將ListView從顯示1項展開爲多項。但問題尚未解決。如果TextView在屏幕大小的一半左右完成,則可以看到完整的ListView。但是,如果ListView在Activity Start中不可見,則無法滾動。只有我能夠滾動的是TextView,而不是ListView。 –

0

我認爲,你有不好的佈局設計,你應該重新設計它。一般來說,在另一個可滾動視圖(如NestedScrollViewScrollView)內不應該有像ListView這樣的可滾動視圖。你真的需要嗎?嘗試改變它,扁平你的視圖結構,這個問題應該消失。您listview layout_behavior

+0

是的,我想要公司的信息,然後自定義ListView社交按鈕,而不是爲每個社交網絡添加按鈕。所以如果可能的話會更好。 –

0
<android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     android:clipToPadding="false" > 
     </android.support.v7.widget.RecyclerView> 

是否缺少應用程序。

+0

**首先,**我沒有使用RecyclerView和** Second **,通過添加該屬性,現在只有ListView被展開。但是,如果它在Activity Startup中離開Screen,那麼我無法通過滾動查看完整的ListView,並且只有第一個項目可見。 –

+0

http://stackoverflow.com/questions/27070079/expand-collapse-lollipop-toolbar-animation-telegram-app –

0

使用ViewCompat.setNestedScrollingEnabled()和你的問題應該得到解決:

相關問題