問一個佈局問題

时间:2022-06-09 16:05:25
問一個佈局問題
如圖這樣,Android是不是只能用Recyclerview嵌套Recyclerview或者ListView嵌套ListView來做,IOS的同事說IOS的UItableView可以按分組操作,但是android好像不行,大佬們有沒有簡單的方法。

18 个解决方案

#1


就用ListView嵌套ListView来做啊,并不是很麻烦吧 問一個佈局問題

#2


引用 1 楼 xj396282771 的回复:
就用ListView嵌套ListView来做啊,并不是很麻烦吧 問一個佈局問題

RecyclerView嵌套呢,裡面做出來不難,但是因為涉及到一些計算,例如第一組選了那個,那一組多少錢,這裡比較麻煩而已.

#3


你用一个全局变量,像这样
private double totalMoney;//总计

你每一个点击事件相互间不影响,把每一次操作得到的费用往这个总计里面添加就行了啊
totalMoney+=curMoney

#4


引用 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這個異常,請問這樣的話要怎樣解決,還有就刷新外面的也不行,也是報錯。

#5


固定选项可以不用listview,没必要为了用而用.

#6


既然你知道你的数据源改变了,肯定可以精确到具体的某个list,那么直接获取到外部recyclerview的item内容,包括view,adapter和数据,然后修改进行刷新不就行了?根本不关最外层的List的事情啊.否则你这样一个小改动就去刷新一次页面,开销很大的. 说一个比较方便的做法,建立recyclerview的数组,循环设置你的每一个recyclerview,然后添加到主视图中,然后通过getChildAt(position)方法去获取对应的recyclerview,这样各视图之间互不影响,更方便修改,尤其是对于数据量大的页面,当然如果你不准备进行数据的修改,那么嵌套的recyclerview更好用.

#7


引用 5 楼 A328240784 的回复:
固定选项可以不用listview,没必要为了用而用.

不是固定選項,類似於淘寶購物車那樣,能動態增加和刪除,所以才選用RecycleVIew嵌套RecycleView。

#8


引用 6 楼 qq_28339011 的回复:
既然你知道你的数据源改变了,肯定可以精确到具体的某个list,那么直接获取到外部recyclerview的item内容,包括view,adapter和数据,然后修改进行刷新不就行了?根本不关最外层的List的事情啊.否则你这样一个小改动就去刷新一次页面,开销很大的. 说一个比较方便的做法,建立recyclerview的数组,循环设置你的每一个recyclerview,然后添加到主视图中,然后通过getChildAt(position)方法去获取对应的recyclerview,这样各视图之间互不影响,更方便修改,尤其是对于数据量大的页面,当然如果你不准备进行数据的修改,那么嵌套的recyclerview更好用.

就是會有數據修改,現在是裡面的RecycleView修改數據,外面的RecycleView也要同步修改數據.

#9


引用 6 楼 qq_28339011 的回复:
既然你知道你的数据源改变了,肯定可以精确到具体的某个list,那么直接获取到外部recyclerview的item内容,包括view,adapter和数据,然后修改进行刷新不就行了?根本不关最外层的List的事情啊.否则你这样一个小改动就去刷新一次页面,开销很大的. 说一个比较方便的做法,建立recyclerview的数组,循环设置你的每一个recyclerview,然后添加到主视图中,然后通过getChildAt(position)方法去获取对应的recyclerview,这样各视图之间互不影响,更方便修改,尤其是对于数据量大的页面,当然如果你不准备进行数据的修改,那么嵌套的recyclerview更好用.

你說的辦法我還是不太明白,有沒有實例或者參考,感覺循環建立recycler數組添加到主視圖這裡不明白。

#10


   
 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);
        ...

参考下

#11


大体逻辑,网络请求/数据库等等操作去获取数据源,之后你把数据源整理成嵌套的list,即List<List<Obj>>,由于你的最外层并不需要什么复杂的逻辑,纯粹是由上到下的布局,简单的使用Linearlayout作为父view足够了,设置为vertical竖直排列,然后去new recyclerview并且进行数据绑定和adapter绑定,然后添加进父view中,甚至你还可以把你新建的recyclerview统一加入List使用List进行管理,这样你的每个视图都独立起来互不影响,更改数据只需要getChildAt获取视图然后更改对应数据并且刷新即可

#12


上面也有解决方法, 我这再给你提供个   外层 用RecyclerView 里面 动态创建 View,需要多少就创建多少。 
实际上做起来 还是 RecyclerView 嵌套简单粗暴

#13


引用 11 楼 qq_28339011 的回复:
大体逻辑,网络请求/数据库等等操作去获取数据源,之后你把数据源整理成嵌套的list,即List<List<Obj>>,由于你的最外层并不需要什么复杂的逻辑,纯粹是由上到下的布局,简单的使用Linearlayout作为父view足够了,设置为vertical竖直排列,然后去new recyclerview并且进行数据绑定和adapter绑定,然后添加进父view中,甚至你还可以把你新建的recyclerview统一加入List使用List进行管理,这样你的每个视图都独立起来互不影响,更改数据只需要getChildAt获取视图然后更改对应数据并且刷新即可

也就是說,先通過動態生成分組佈局添加進去,在把每組對應的RecycleView添加到對應的分組佈局,這樣確實互相不影響,但是分組佈局就不能複用了,這樣性能影響會不會很大?

#14


引用 12 楼 moonFY 的回复:
上面也有解决方法, 我这再给你提供个   外层 用RecyclerView 里面 动态创建 View,需要多少就创建多少。 
实际上做起来 还是 RecyclerView 嵌套简单粗暴

嗯嗯,我是怕嵌套會出現奇怪的問題,不過外層用RecyclerView,在動態添加的話,控制數據這裡就比較麻煩一點。

#15


还是根据具体业务需求来,本身recyclerview的复用机制就是针对布局复杂,条目过多进行设计优化的,对于一个页面可能最多就10条数据,而且不涉及到图片之类的,完全不必要在乎性能,所以具体使用看你自己,当你的数量大且涉及到数据修改就使用@moonFY的方法,数据量少且需要修改就用我之前提到的,如果仅仅是展示那么嵌套的recyclerview最简单

#16


该回复于2018-05-04 13:16:48被管理员删除

#17


该回复于2018-05-04 13:16:48被管理员删除

#18


引用 14 楼 weixin_41853995 的回复:
Quote: 引用 12 楼 moonFY 的回复:

上面也有解决方法, 我这再给你提供个   外层 用RecyclerView 里面 动态创建 View,需要多少就创建多少。 
实际上做起来 还是 RecyclerView 嵌套简单粗暴

嗯嗯,我是怕嵌套會出現奇怪的問題,不過外層用RecyclerView,在動態添加的話,控制數據這裡就比較麻煩一點。

只要你写的代码 没问题 嵌套 不会出现什么幺蛾子, 动态添加的话 需要你控制做的好

#1


就用ListView嵌套ListView来做啊,并不是很麻烦吧 問一個佈局問題

#2


引用 1 楼 xj396282771 的回复:
就用ListView嵌套ListView来做啊,并不是很麻烦吧 問一個佈局問題

RecyclerView嵌套呢,裡面做出來不難,但是因為涉及到一些計算,例如第一組選了那個,那一組多少錢,這裡比較麻煩而已.

#3


你用一个全局变量,像这样
private double totalMoney;//总计

你每一个点击事件相互间不影响,把每一次操作得到的费用往这个总计里面添加就行了啊
totalMoney+=curMoney

#4


引用 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這個異常,請問這樣的話要怎樣解決,還有就刷新外面的也不行,也是報錯。

#5


固定选项可以不用listview,没必要为了用而用.

#6


既然你知道你的数据源改变了,肯定可以精确到具体的某个list,那么直接获取到外部recyclerview的item内容,包括view,adapter和数据,然后修改进行刷新不就行了?根本不关最外层的List的事情啊.否则你这样一个小改动就去刷新一次页面,开销很大的. 说一个比较方便的做法,建立recyclerview的数组,循环设置你的每一个recyclerview,然后添加到主视图中,然后通过getChildAt(position)方法去获取对应的recyclerview,这样各视图之间互不影响,更方便修改,尤其是对于数据量大的页面,当然如果你不准备进行数据的修改,那么嵌套的recyclerview更好用.

#7


引用 5 楼 A328240784 的回复:
固定选项可以不用listview,没必要为了用而用.

不是固定選項,類似於淘寶購物車那樣,能動態增加和刪除,所以才選用RecycleVIew嵌套RecycleView。

#8


引用 6 楼 qq_28339011 的回复:
既然你知道你的数据源改变了,肯定可以精确到具体的某个list,那么直接获取到外部recyclerview的item内容,包括view,adapter和数据,然后修改进行刷新不就行了?根本不关最外层的List的事情啊.否则你这样一个小改动就去刷新一次页面,开销很大的. 说一个比较方便的做法,建立recyclerview的数组,循环设置你的每一个recyclerview,然后添加到主视图中,然后通过getChildAt(position)方法去获取对应的recyclerview,这样各视图之间互不影响,更方便修改,尤其是对于数据量大的页面,当然如果你不准备进行数据的修改,那么嵌套的recyclerview更好用.

就是會有數據修改,現在是裡面的RecycleView修改數據,外面的RecycleView也要同步修改數據.

#9


引用 6 楼 qq_28339011 的回复:
既然你知道你的数据源改变了,肯定可以精确到具体的某个list,那么直接获取到外部recyclerview的item内容,包括view,adapter和数据,然后修改进行刷新不就行了?根本不关最外层的List的事情啊.否则你这样一个小改动就去刷新一次页面,开销很大的. 说一个比较方便的做法,建立recyclerview的数组,循环设置你的每一个recyclerview,然后添加到主视图中,然后通过getChildAt(position)方法去获取对应的recyclerview,这样各视图之间互不影响,更方便修改,尤其是对于数据量大的页面,当然如果你不准备进行数据的修改,那么嵌套的recyclerview更好用.

你說的辦法我還是不太明白,有沒有實例或者參考,感覺循環建立recycler數組添加到主視圖這裡不明白。

#10


   
 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);
        ...

参考下

#11


大体逻辑,网络请求/数据库等等操作去获取数据源,之后你把数据源整理成嵌套的list,即List<List<Obj>>,由于你的最外层并不需要什么复杂的逻辑,纯粹是由上到下的布局,简单的使用Linearlayout作为父view足够了,设置为vertical竖直排列,然后去new recyclerview并且进行数据绑定和adapter绑定,然后添加进父view中,甚至你还可以把你新建的recyclerview统一加入List使用List进行管理,这样你的每个视图都独立起来互不影响,更改数据只需要getChildAt获取视图然后更改对应数据并且刷新即可

#12


上面也有解决方法, 我这再给你提供个   外层 用RecyclerView 里面 动态创建 View,需要多少就创建多少。 
实际上做起来 还是 RecyclerView 嵌套简单粗暴

#13


引用 11 楼 qq_28339011 的回复:
大体逻辑,网络请求/数据库等等操作去获取数据源,之后你把数据源整理成嵌套的list,即List<List<Obj>>,由于你的最外层并不需要什么复杂的逻辑,纯粹是由上到下的布局,简单的使用Linearlayout作为父view足够了,设置为vertical竖直排列,然后去new recyclerview并且进行数据绑定和adapter绑定,然后添加进父view中,甚至你还可以把你新建的recyclerview统一加入List使用List进行管理,这样你的每个视图都独立起来互不影响,更改数据只需要getChildAt获取视图然后更改对应数据并且刷新即可

也就是說,先通過動態生成分組佈局添加進去,在把每組對應的RecycleView添加到對應的分組佈局,這樣確實互相不影響,但是分組佈局就不能複用了,這樣性能影響會不會很大?

#14


引用 12 楼 moonFY 的回复:
上面也有解决方法, 我这再给你提供个   外层 用RecyclerView 里面 动态创建 View,需要多少就创建多少。 
实际上做起来 还是 RecyclerView 嵌套简单粗暴

嗯嗯,我是怕嵌套會出現奇怪的問題,不過外層用RecyclerView,在動態添加的話,控制數據這裡就比較麻煩一點。

#15


还是根据具体业务需求来,本身recyclerview的复用机制就是针对布局复杂,条目过多进行设计优化的,对于一个页面可能最多就10条数据,而且不涉及到图片之类的,完全不必要在乎性能,所以具体使用看你自己,当你的数量大且涉及到数据修改就使用@moonFY的方法,数据量少且需要修改就用我之前提到的,如果仅仅是展示那么嵌套的recyclerview最简单

#16


该回复于2018-05-04 13:16:48被管理员删除

#17


该回复于2018-05-04 13:16:48被管理员删除

#18


引用 14 楼 weixin_41853995 的回复:
Quote: 引用 12 楼 moonFY 的回复:

上面也有解决方法, 我这再给你提供个   外层 用RecyclerView 里面 动态创建 View,需要多少就创建多少。 
实际上做起来 还是 RecyclerView 嵌套简单粗暴

嗯嗯,我是怕嵌套會出現奇怪的問題,不過外層用RecyclerView,在動態添加的話,控制數據這裡就比較麻煩一點。

只要你写的代码 没问题 嵌套 不会出现什么幺蛾子, 动态添加的话 需要你控制做的好