簡體   English   中英

禁用滾動查看ScrollView中包含的ListView

[英]Disable scrolling of a ListView contained within a ScrollView

我想為我的用戶顯示一個“個人資料”屏幕。

它必須具有三個視圖(2個Buttons和一個ImageView )以及一個ListView才能顯示該用戶制作的內容。

但是,我不希望ListView滾動。 相反,我希望它盡可能大,並將所有視圖放入ScrollView ,以便使用ListView滾動出前三個視圖。 當然,這不能按預期工作。

我所有的三個項目都在LinearLayout 我想將它們設置為ListView的第一項,但這導致它們可以被選擇為第一項,並且必須進行一些不必要的編碼。

有沒有一種簡單的方法可以執行此操作,還是我必須堅持將Layout設置為ListView中的第一項?

我為此找到了一個非常簡單的解決方案。 只需獲取列表視圖的適配器並在顯示所有項目時計算其大小即可。 優點是此解決方案也可以在ScrollView中使用。

例:

public static void justifyListViewHeightBasedOnChildren (ListView listView) {

    ListAdapter adapter = listView.getAdapter();

    if (adapter == null) {
        return;
    }
    ViewGroup vg = listView;
    int totalHeight = 0;
    for (int i = 0; i < adapter.getCount(); i++) {
        View listItem = adapter.getView(i, null, vg);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams par = listView.getLayoutParams();
    par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
    listView.setLayoutParams(par);
    listView.requestLayout();
}

通過您的ListView對象調用此函數:

justifyListViewHeightBasedOnChildren(myListview);

上面顯示的功能是對以下內容的修改: 禁止在列表視圖中滾動

將適配器設置為列表視圖后,請注意調用此功能。 如果適配器中條目的大小已更改,則還需要調用此函數。

你可以這樣做

listView.setScrollContainer(false);

有關更多信息,請檢查

如何獲得不可滾動的ListView?

將它們作為第一項添加到ListView似乎是一個很好的解決方案。

要使View不可選擇,只需獲取view和.setClickable(false)

我會在ListView頂部添加一個具有不可見背景的View 設置一個View.OnTouchListener() 並通過返回消耗事件trueonTouch()的方法View.OnTouchListener()

當您希望列表再次向后滾動時,請刪除透明View上設置的觸摸偵聽器

如果必須在列表視圖中顯示有限數量的項目,並且要停止滾動列表視圖,則必須使listview的高度大於項目的總高度。

例如,您要顯示3個項目。 (行高為30)。 那么項目的總高度將變為3 x 30dp = 90dp,

所以現在您必須將listview的高度設置為大於90。例如:100dp。 所以現在您的列表視圖在任何情況下都不會滾動。

我認為最好的方法是將2個按鈕和圖像視圖放在LinearLayout(或任何適合您的布局)中,然后使用addHeaderView方法將此布局添加為列表標題:

http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View

使用以下指令:

name_lista.getLayoutParams (). height = new_size

new_size是一個變量,您將根據列表中元素的數量進行計算,例如:

new_size = 100 * list_size;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM