Android:如何在没有滚动功能的列表中显示所有项目

Posted

技术标签:

【中文标题】Android:如何在没有滚动功能的列表中显示所有项目【英文标题】:Android: How to display all items in a list without scroll functionality 【发布时间】:2019-06-27 19:58:45 【问题描述】:

我想显示类似RecyclerView 的内容,但大小会根据列表中的项目数量动态变化。每个项目都显示在项目的View 中。由于列表视图的高度设置为有多少项目视图的总高度,因此不需要在视图中进行任何滚动。

目前,我正在使用 RecyclerViewsetHasFixedSize = false,正如您在这个 sn-p 中看到的那样:

recyclerview.apply 
            layoutManager = LinearLayoutManager(rootView.context)
            adapter = PlanAdapter(dateItem.planItems)
            setHasFixedSize(false)

在第一个之后不显示任何项目。这是我实现它的示例屏幕:

蓝色突出显示这些项目在本地存储中那里,但我制作的动态 RecyclerView 没有显示这些项目。不过,有比为此创建一个完整的 RecyclerView 更好的选择,对吧?

【问题讨论】:

嗨@fawwaz,不确定是否理解您的问题,所以我可以澄清一下吗?您不希望整个页面能够滚动还是只滚动列表?您根本不想在这个问题上使用 recyclerview 吗?列表的大小是动态变化的还是其中的每个项目?您能事先知道将显示多少个项目吗?他们是很多还是只有少数?你能不能只用一个线性布局来显示项目?即使项目的数量并不总是相同,您也可以根据您拥有的视图数量以编程方式绘制此布局。谢谢。 我不希望列表视图滚动,但如果需要,页面可以滚动。我只是认为制作 recyclerview 并不是最好的解决方案性能。好吧,列表从 0 个项目开始,用户可以从应用程序中创建一个新项目。如何以编程方式绘制此布局?是否只是在每次创建项目时添加线性布局?谢谢 哦,我明白了。好吧,recyclerViews 通常在性能方面非常好,但您可以通过 android:nestedScrollingEnabled="false" 禁用它们的滚动并将其留给视图的父级。是的,您可以通过自定义以编程方式向布局添加新项目,从而以编程方式绘制布局。如果我找到样本,我会在这里发布。 【参考方案1】:

如果您想要实现的只是禁用回收器的滚动,您可以通过以编程方式或通过 recyclerView 的 XML 调用 android:nestedScrollingEnabled="false" 来实现。

现在,如果您不想为此使用 recyclerview,您可以使用自定义视图来扩展您的布局,例如 in

public class AllergenView extends LinearLayout 

    private View rootView;
    private ImageView icon;
    private String allergenTag;
    Activity mActivity;

    public AllergenView(Activity activity, String allergenTag) 
        super(activity);
        this.mActivity = activity;
        this.allergenTag = allergenTag;

        init(activity);
    

    public AllergenView(Context context, AttributeSet attrs) 
    
        super(context, attrs);
    

    private void init(Context context) 

        rootView = inflate(context, R.layout.view_allergen_icon, this);

        // Bind views
        icon = (ImageView) findViewById(R.id.img_icon);
    

这样称呼

for (Allergen a : recipe.getAllergen()) 

                View v1 = new AllergenView(mActivity, Utils.toString(a.getAllergen()));
            holder.linearLayoutHorizontal.addView(v1);

        
    

【讨论】:

对添加到线性布局的视图设置相同的权重,以便视图平均共享垂直空间

以上是关于Android:如何在没有滚动功能的列表中显示所有项目的主要内容,如果未能解决你的问题,请参考以下文章

在android列表视图中向下滚动时出现***Exception

仅具有本地 Room 数据库的 Android Paging v3:如何滚动到分页列表中的特定位置?

列表视图的 Android LazyList 初始加载在滚动之前不显示图像

如何在滚动列表视图上显示/隐藏底部导航视图?

如何在 Android Studio 滚动条(如 Eclipse)中显示错误/警告标记?

如何让ScrollView 的滚动条不显示