使用RecyclerView在屏幕上显示我列表的特定数量

问题描述 投票:1回答:3

我有一个列表,大小为x个数字。即使用户滚动查看列表,我也想在屏幕上显示6个项目,它应该在屏幕上显示6个项目。

我尝试过此Answer,但我的商品的高度被裁剪了,因此对我不起作用。

[Edit我想照常检索所有列表。我只想让屏幕携带6件物品。

java android android-recyclerview recycler-adapter android-viewholder
3个回答
0
投票
@Override
    public int getItemCount() {
        return salesAccountDetailData.size();
    }

0
投票

//获取RecyclerView的引用

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

//设置一个具有6列数的GridLayoutManager,垂直重力

GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(),6,LinearLayoutManager.VERTICAL,false);recyclerView.setLayoutManager(gridLayoutManager); // set LayoutManager to RecyclerView


0
投票

缺乏代码,我只能假设您喜欢从Api或数据库等获取X编号列表,并且您最多只希望显示6个项目

查看到目前为止您所做的一些代码会更容易,因此在缺乏代码的情况下,更正/建议将为您提供更好的适应性,我给您一些建议:

  1. 您的视图对如何处理数据一无所知,它应该仅显示数据,在这种情况下,它应该接收6项并在视图中显示它们(在您的情况下为recyclerView)。

  2. 我假设您没有使用任何模式(例如MVVM或MVP),而只是从Activity中的(API或数据库)获取列表-(额外提示->使用某种体系结构设计总是更好,将您的逻辑分离到Presenter / viewModel层中,以便稍后进行单元测试)

让您假设您在Activity中定义了适配器,并像这样传递列表:

您的活动中

var listOfAllYourItems =  arrayListOf(object1,object2,...,object100)
    val myAdapter = MyAdapter() 
    myAdapter.setItems(listOfAllYourItems.sublist(1,6)) //this will only pass the first 6 items
    the rest of normal stuff ...

所以这就像您只有6个项目并在recyclerView中显示它一样-简单(视图不包含有关如何处理6个以上项目的逻辑,等等,视图只知道如何显示项目并且不关心如何处理任何内容其他)


加分:您可以在视图中添加下一个/上一个按钮(也许在活动xml中的RecyclerView下方),然后向其中添加一些逻辑以显示onNextTapped列表中的下6个项目或轻按上一个按钮时显示前6个项目,例如:

您的活动中

    fun noNextTapped(){
myAdapter.setItems(listOfYour6Items.sublist(6,12))
    //of course you need to add your logic to handle edge cases like what if the list size does not have enough items (like if it is only have 10 items) etc , and some other logic on how to know which page you are displaying so you can pass the correct number of items to the adapter onNextTapped fun (each page shows 6 items)   I leave those to you

    }

在您的MyAdapter中:

class MyAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> {
    var list List<Objects> ;
fun setItems(new6Items : List<Objects>){
            list.clear()
            list.addAll(new6Items) 
            notifyDataSetChanged()

}

...

}
© www.soinside.com 2019 - 2024. All rights reserved.