【问题标题】:android listview without scrolling没有滚动的android listview
【发布时间】:2015-09-17 14:30:06
【问题描述】:

我有一个 LinearLayout,其中包括两个 ListView。每个 ListView 都有自己的 ArrayAdapter。现在滚动不应该在 ListViews 中,用户应该看到整个 Lists 并滚动整个视图。由于 inerhit Scrolling Views 无法使用 ScrollView 环绕 LinearLayout...。

如何展开 ListViews 并让用户只滚动外部视图?

【问题讨论】:

  • 使用垂直 LinearLayouts 代替 ListViews 并将 Views 膨胀到它们。
  • 我怎样才能给它们充气?抱歉,我一直使用带有 ListView 的 ArrayAdapter...

标签: android android-listview scrollview


【解决方案1】:

您不应该以这种方式使用 ListView。

列表视图旨在回收视图,如果它不是正在滚动的视图,它就无法做到这一点。

您可以简单地使用 LinearLayout 并将每个视图添加到布局中。这会比使用 ListView 更好。

(这并不意味着它是最好的解决方案)

【讨论】:

  • 因此我必须以编程方式创建每个视图?或者有没有办法进一步使用 ArrayAdapter?
  • 是的,它有效!我在这里找到了一个如何将 ArrayAdapter 与 LinearLayout 一起使用的示例:stackoverflow.com/a/12405779/2186109
【解决方案2】:

这可以在 RecyclerView 中轻松完成。但在这种情况下,您使用的是 ListViews,因此请尝试 listView.setScrollContainer(false); 可能对你有用

【讨论】:

    【解决方案3】:

    您应该像这样膨胀视图。

    // from content View of activity or fragment
        listView = (LinearLayout) findViewById(R.id.sos_list_view);
    
        listView.removeAllViews();
        List<SosObject> sosList = batabase.getAllItems();
    
                for(SosObject t: sosList) {
                    LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    // Item layout 
                    View view = inflater.inflate(R.layout.sos_prewivew_item, null);
    
                    TextView comment = (TextView) view.findViewById(R.id.sos_comment_text);
                    TextView date = (TextView) view.findViewById(R.id.sos_date_text);
                    TextView id = (TextView) view.findViewById(R.id.sos_answer_id);
                    TextView tittle = (TextView) view.findViewById(R.id.answer_tittle);
    
                    listView.addView(view);
                }
            }
    

    你的 xml 应该是这样的:

    <ScrollView> 
        <LinearLayout>
              </LinearLayout > // Fist list
              </LinearLayout > // Second list
        </LinearLayout>
    </ScrollView>
    

    【讨论】:

    • 对不起,你能扩展你的代码吗?什么是 sosList、DaAns、SosObjects、...?
    • 没有必要。基本上这是我的应用程序代码段之一。 SosObject 是您要显示的对象的实例。这是一个列表项。我编辑了代码以便更好地理解。
    【解决方案4】:

    ListViews 不能被覆盖以失去滚动能力。它们似乎被设计为占据整个屏幕的顶级对象。
    所以基本上你有两个选择:

    • 将所有元素转换为 ListView 的项目
    • 使用 LinearLayouts 而不是 ListViews 并将所有元素包装在 ScrollView 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多