如何获取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中的每个值?

如何获取gridview单元格的值

关于怎样获取DevExpress GridView过滤后或排序后的数据集问题(转)

如何设置winform中gridview的表头宽度,及编号

如何获取GridView中某行某列的值