問一個佈局問題

Cong_Deemo 2018-05-03 12:48:45

如圖這樣,Android是不是只能用Recyclerview嵌套Recyclerview或者ListView嵌套ListView來做,IOS的同事說IOS的UItableView可以按分組操作,但是android好像不行,大佬們有沒有簡單的方法。
...全文
611 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
bt侠 2018-05-04
  • 打赏
  • 举报
回复
还是根据具体业务需求来,本身recyclerview的复用机制就是针对布局复杂,条目过多进行设计优化的,对于一个页面可能最多就10条数据,而且不涉及到图片之类的,完全不必要在乎性能,所以具体使用看你自己,当你的数量大且涉及到数据修改就使用@moonFY的方法,数据量少且需要修改就用我之前提到的,如果仅仅是展示那么嵌套的recyclerview最简单
Cong_Deemo 2018-05-04
  • 打赏
  • 举报
回复
引用 12 楼 moonFY 的回复:
上面也有解决方法, 我这再给你提供个 外层 用RecyclerView 里面 动态创建 View,需要多少就创建多少。 实际上做起来 还是 RecyclerView 嵌套简单粗暴
嗯嗯,我是怕嵌套會出現奇怪的問題,不過外層用RecyclerView,在動態添加的話,控制數據這裡就比較麻煩一點。
Cong_Deemo 2018-05-04
  • 打赏
  • 举报
回复
引用 11 楼 qq_28339011 的回复:
大体逻辑,网络请求/数据库等等操作去获取数据源,之后你把数据源整理成嵌套的list,即List<List<Obj>>,由于你的最外层并不需要什么复杂的逻辑,纯粹是由上到下的布局,简单的使用Linearlayout作为父view足够了,设置为vertical竖直排列,然后去new recyclerview并且进行数据绑定和adapter绑定,然后添加进父view中,甚至你还可以把你新建的recyclerview统一加入List使用List进行管理,这样你的每个视图都独立起来互不影响,更改数据只需要getChildAt获取视图然后更改对应数据并且刷新即可
也就是說,先通過動態生成分組佈局添加進去,在把每組對應的RecycleView添加到對應的分組佈局,這樣確實互相不影響,但是分組佈局就不能複用了,這樣性能影響會不會很大?
moonFY 2018-05-04
  • 打赏
  • 举报
回复
上面也有解决方法, 我这再给你提供个 外层 用RecyclerView 里面 动态创建 View,需要多少就创建多少。 实际上做起来 还是 RecyclerView 嵌套简单粗暴
bt侠 2018-05-04
  • 打赏
  • 举报
回复
大体逻辑,网络请求/数据库等等操作去获取数据源,之后你把数据源整理成嵌套的list,即List<List<Obj>>,由于你的最外层并不需要什么复杂的逻辑,纯粹是由上到下的布局,简单的使用Linearlayout作为父view足够了,设置为vertical竖直排列,然后去new recyclerview并且进行数据绑定和adapter绑定,然后添加进父view中,甚至你还可以把你新建的recyclerview统一加入List使用List进行管理,这样你的每个视图都独立起来互不影响,更改数据只需要getChildAt获取视图然后更改对应数据并且刷新即可
bt侠 2018-05-04
  • 打赏
  • 举报
回复
   
 List<Obj> list = new ArrayList<>();
        ...
        LinearLayout linearLayout = (LinearLayout) findViewById(R.id.content);
        for (int i = 0; i < list.size(); i++) {
            RecyclerView recyclerView = new RecyclerView(this);
            ...
            recyclerView.setAdapter(adapter);
            linearLayout.addView(recyclerView);

        }
        RecyclerView myrecyclerView = (RecyclerView) linearLayout.getChildAt(1);
        ...
参考下
Cong_Deemo 2018-05-04
  • 打赏
  • 举报
回复
引用 6 楼 qq_28339011 的回复:
既然你知道你的数据源改变了,肯定可以精确到具体的某个list,那么直接获取到外部recyclerview的item内容,包括view,adapter和数据,然后修改进行刷新不就行了?根本不关最外层的List的事情啊.否则你这样一个小改动就去刷新一次页面,开销很大的. 说一个比较方便的做法,建立recyclerview的数组,循环设置你的每一个recyclerview,然后添加到主视图中,然后通过getChildAt(position)方法去获取对应的recyclerview,这样各视图之间互不影响,更方便修改,尤其是对于数据量大的页面,当然如果你不准备进行数据的修改,那么嵌套的recyclerview更好用.
你說的辦法我還是不太明白,有沒有實例或者參考,感覺循環建立recycler數組添加到主視圖這裡不明白。
Cong_Deemo 2018-05-04
  • 打赏
  • 举报
回复
引用 6 楼 qq_28339011 的回复:
既然你知道你的数据源改变了,肯定可以精确到具体的某个list,那么直接获取到外部recyclerview的item内容,包括view,adapter和数据,然后修改进行刷新不就行了?根本不关最外层的List的事情啊.否则你这样一个小改动就去刷新一次页面,开销很大的. 说一个比较方便的做法,建立recyclerview的数组,循环设置你的每一个recyclerview,然后添加到主视图中,然后通过getChildAt(position)方法去获取对应的recyclerview,这样各视图之间互不影响,更方便修改,尤其是对于数据量大的页面,当然如果你不准备进行数据的修改,那么嵌套的recyclerview更好用.
就是會有數據修改,現在是裡面的RecycleView修改數據,外面的RecycleView也要同步修改數據.
Cong_Deemo 2018-05-04
  • 打赏
  • 举报
回复
引用 5 楼 A328240784 的回复:
固定选项可以不用listview,没必要为了用而用.
不是固定選項,類似於淘寶購物車那樣,能動態增加和刪除,所以才選用RecycleVIew嵌套RecycleView。
moonFY 2018-05-04
  • 打赏
  • 举报
回复
引用 14 楼 weixin_41853995 的回复:
[quote=引用 12 楼 moonFY 的回复:] 上面也有解决方法, 我这再给你提供个 外层 用RecyclerView 里面 动态创建 View,需要多少就创建多少。 实际上做起来 还是 RecyclerView 嵌套简单粗暴
嗯嗯,我是怕嵌套會出現奇怪的問題,不過外層用RecyclerView,在動態添加的話,控制數據這裡就比較麻煩一點。[/quote] 只要你写的代码 没问题 嵌套 不会出现什么幺蛾子, 动态添加的话 需要你控制做的好
bt侠 2018-05-03
  • 打赏
  • 举报
回复
既然你知道你的数据源改变了,肯定可以精确到具体的某个list,那么直接获取到外部recyclerview的item内容,包括view,adapter和数据,然后修改进行刷新不就行了?根本不关最外层的List的事情啊.否则你这样一个小改动就去刷新一次页面,开销很大的. 说一个比较方便的做法,建立recyclerview的数组,循环设置你的每一个recyclerview,然后添加到主视图中,然后通过getChildAt(position)方法去获取对应的recyclerview,这样各视图之间互不影响,更方便修改,尤其是对于数据量大的页面,当然如果你不准备进行数据的修改,那么嵌套的recyclerview更好用.
追风筝的孩子 2018-05-03
  • 打赏
  • 举报
回复
固定选项可以不用listview,没必要为了用而用.
Cong_Deemo 2018-05-03
  • 打赏
  • 举报
回复
引用 3 楼 xj396282771 的回复:
你用一个全局变量,像这样
private double totalMoney;//总计
你每一个点击事件相互间不影响,把每一次操作得到的费用往这个总计里面添加就行了啊
totalMoney+=curMoney
按照你的思路可以,但現在是,二級RecycleView的數據是有更新,我刷新外面的RecycleView然後再刷新裡面的RecycleView的話,就會出java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling這個異常,請問這樣的話要怎樣解決,還有就刷新外面的也不行,也是報錯。
Jing丶無雙 2018-05-03
  • 打赏
  • 举报
回复
你用一个全局变量,像这样
private double totalMoney;//总计
你每一个点击事件相互间不影响,把每一次操作得到的费用往这个总计里面添加就行了啊
totalMoney+=curMoney
Cong_Deemo 2018-05-03
  • 打赏
  • 举报
回复
引用 1 楼 xj396282771 的回复:
就用ListView嵌套ListView来做啊,并不是很麻烦吧
RecyclerView嵌套呢,裡面做出來不難,但是因為涉及到一些計算,例如第一組選了那個,那一組多少錢,這裡比較麻煩而已.
Jing丶無雙 2018-05-03
  • 打赏
  • 举报
回复
就用ListView嵌套ListView来做啊,并不是很麻烦吧

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧