如何获得不可滚动的ListView?

Ist*_*tao 14 android

我应该想要一个不可滚动的ListView,并显示整个ListView.这是因为我的整个屏幕都是ScrollView,我用RelativeLayout调度小部件,所以我不需要ListView滚动.

我用代码设置我的ui,而不是用xml.

我用过listView.setScrollContainer(false),但它不起作用,我不明白为什么.

谢谢.

ElY*_*nte 14

正确的答案在这里.

只需将此侦听器分配给您ListView:

    listView.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_MOVE) {
            return true; // Indicates that this has been handled by you and will not be forwarded further.
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)


Chr*_*623 14

我找到了一个非常简单的解决方案.只需获取列表视图的适配器并在显示所有项目时计算其大小.优点是此解决方案也适用于ScrollView.

例:

public 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();
}
Run Code Online (Sandbox Code Playgroud)

调用此函数传递ListView对象:

justifyListViewHeightBasedOnChildren(myListview);
Run Code Online (Sandbox Code Playgroud)

上面显示的功能是对帖子的修改: 禁用列表视图中的滚动

请注意在将适配器设置为列表视图后调用此函数.如果适配器中条目的大小已更改,则还需要调用此函数.

  • 谢谢.你的答案很棒.应该有一个离开让列表视图知道这正是我们想要的(我需要一个内部有一个小列表视图的滚动视图,因为我重新使用带有列表视图的片段我不想要更改和使用LinearLayout).我没有找到更好的方法来做到这一点,所以你的回答几乎是我能找到的最好的.希望它得到更多的赞成.值得他们. (2认同)

Fal*_*rri 12

不要将列表视图放在滚动视图中,它不起作用.如果您想要一个不滚动的项目列表,则称为线性布局.

  • 如何为Linearlayout设置适配器(Lazy Loader)? (6认同)
  • @Istao:您可以将OnClickListener或OnTouchListener绑定到一个视图,该视图在单击或触摸时将触发. (3认同)
  • 如果您想要"ListView"中的其他功能,例如选择项目,"CursorAdapter"等等,该怎么办? (2认同)

Tim*_*mmm 5

根据您要尝试执行的操作,您可以通过放弃ScrollView和而不使用ListViewaddHeaderView(View)和来解决问题addFooterView(View)