如何获取gridview(或RecyclerGridview)的选定项目的所有最近位置
Posted
技术标签:
【中文标题】如何获取gridview(或RecyclerGridview)的选定项目的所有最近位置【英文标题】:How to get all nearest position of selected item of gridview(or RecyclerGridview) 【发布时间】:2017-07-30 11:59:52 【问题描述】:我正在尝试做一些逻辑,但我无法达到实际结果。 我正在使用 recyclerview(GridLayoutManager)。 我有像 3*3,5*5,7*7...等等这样的网格单元......
下面是 3*3 网格的图像
现在我需要所有最近的单元格的位置是什么情况。
如图所示,我在下面描述了一些案例:
案例 1:
选定单元格 -1 预期结果-2,5,4
案例2:(如图)
选定单元格 -5 预期结果-1,2,3,4,6,7,8,9
案例 3:
选定单元格 -6 预期结果-3,5,9
那么,如何动态实现所有单元格框 3*3,5*5,7*7....等等
【问题讨论】:
你尝试了什么?这应该很容易......让选定的单元格显示为 (r,c) 然后你必须让所有单元格从 (r-1, c-1) 到 (r+1, c+1) 排除自我而不是现有的...(r-行,c-列) 但是先生,这是 arraylist 是 1D 假设它的大小为 9 然后网格是 3*3 那么我怎么能理解哪个是行和哪个是列,以及它的变量 5*5,7* 7 等等.. @Selvin 【参考方案1】:我可以给你一个简单的方法来实现这个。不是完美的,但很容易。
public void getNeareast(int m, int choosedId)
if (m <= 2) //too simple ,you can just return the right result;
return;
int[] choose = new int[]-m - 1, -m, -m + 1, -1, 0, +1, m - 1, m, m + 1;
int x = choosedId / m;
int y = choosedId % m;
if (x == 0 || (y == 0 && x == 1)) //no top data
choose[0] = 0;
choose[1] = 0;
choose[2] = 0;
if ((x == m - 1 && y != 0) || x == m) // no bottom data
choose[6] = 0;
choose[7] = 0;
choose[8] = 0;
if (y == 1) // no left data
choose[0] = 0;
choose[3] = 0;
choose[6] = 0;
if (y == 0) // no right data
choose[2] = 0;
choose[5] = 0;
choose[8] = 0;
List<Integer> result = new ArrayList<>();
for (int i = 0; i < 9; i++) //get choosed data
if (choose[i] != 0)
result.add(choosedId + choose[i]);
for (int i : result) //print result;
Log.d("biu", "biu->" + i);
【讨论】:
getNeareast() 中的 m 是什么; m= 3 那么它的工作正常......但是你能不能给我一个简短的描述。它的工作.. 好的,主要思想是,当 m > 3 时,您选择的每个项目周围应该有 8 个项目。想想看,有一个 3 * 3 的单元格框。(m = 3)如果你选择 5,它周围应该有 8 个项目。这是正常情况。如果你选择 1,周围也应该有 8 个项目它,但是 1 在边界上,并且 1 % 3 = 1 表示选择的项目是第一列,所以左边没有项目,1 / 3 = 0.333333 ,整数部分为零,所以没有项目在它的顶部,所以你只需从 8 个项目中切掉左边和顶部的项目,你会得到正确的结果。其他情况就像这样。以上是关于如何获取gridview(或RecyclerGridview)的选定项目的所有最近位置的主要内容,如果未能解决你的问题,请参考以下文章
如何获取gridview(或RecyclerGridview)的选定项目的所有最近位置
如何从GridView或GridLayout中获取每个EditText中的每个值?