如何在同一可见项目中更改 gridview 的列数。 Android

How to change number of column of a gridview at same visible item. Android

我正在编写一个 android 应用程序,我在其中使用网格视图来显示一些项目。我想为用户提供一个可配置的视图,他们可以通过单击浮动操作按钮来更改 activity 上的列数。我正在更改列 no using

gridView.setNumColumns(selectedColumnNo);

这工作正常但问题是如果用户在滚动后更改列数,第一个可见位置设置为数组列表的第一项,因此用户必须再次滚动视图。有人可以告诉我我哪里做错了吗?或者这是执行此操作的正确方法还是我应该使用其他方法。

代码片段会有所帮助 谢谢。 更新:: 目前我正在使用下面的片段

findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int firstPosition = gv.getFirstVisiblePosition();

            if(gv.getNumColumns()==2)
            {
                gv.setNumColumns(1);
                gv.setSelection(firstPosition);
            }
            else {

                gv.setNumColumns(2);
                gv.setSelection(firstPosition);
            }


        }
    });

现在的问题是每 4 次切换网格视图显示 arraylist 的第一个元素

就在调用 setNumColumns() 之前,保存 GridView 的第一个可见位置:

int firstPosition = gridView.getFirstVisiblePosition();

然后,在更改列数后,将该整数传递给 setSelection():

gridView.setSelection(firstPosition);

"Selection",与直觉相反,与 "activation" 不同。它将确保视图在屏幕上,但不会以任何其他方式明显影响它。