当屏幕方向从纵向到横向时,如何将数据保留在回收器视图中?

时间:2019-04-06 18:15:41

标签: android android-recyclerview screen-orientation

我有一个自定义对象数组,以在回收器视图中显示,我正在使用GridLayout管理器作为recylerview并显示(2x4),(3x3)等正方形。 当用户单击这些正方形时,颜色会更改。

但是当屏幕定向时,视图会刷新。

我的问题是在屏幕方向显示时如何保留此数据(所选正方形的颜色)?

3 个答案:

答案 0 :(得分:1)

  1. 创建接口:

    public interface ClickCallback {
    
    void onItemClicked(String id);
    }
    
  2. 在您的活动中创建一个回调并将其传递给适配器,如下所示:

    ClickCallback callback = new ClickCallback() {
            @Override
            public void onItemClicked(String id) {
                //your list item object must have a method to get color
                color = yourDataList.get(id).getColor();
    
            }
        };
    
        protected void onSaveInstanceState(Bundle bundle) {
       super.onSaveInstanceState(bundle);
       bundle.putInt("color", color);
       }
    
       YourAdapter adapter = new YourAdapter (yourDataList, callback) 
    
  3. 在您的适配器中不要忘记设置OnClickListener并调用适当的方法,就像这样:

           public ListItemViewHolder(View itemView) {
            super(itemView);
           //your code
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    callback.onItemClicked(getAdapterPosition());
                }
            });
        }
    }
    
    1. 在OnCreate中提取您的颜色数据:

         public void onCreate(Bundle bundle) {
         if (bundle != null) {
         value = bundle.getInt("color");
         }
      }
      

答案 1 :(得分:0)

您可以以适当的格式存储每个方块的状态并保存它们  在onSaveInstanceState上,然后在onCreate方法上检索它们,并根据需要操作适配器。

Read more...

希望这会有所帮助!

答案 2 :(得分:0)

“但是当屏幕定向时,视图会刷新。”

  • 在屏幕旋转上创建活动的新实例

您可以有一个ViewModel类,该类存储数据的数组列表,包括它们的当前状态。通过轮播重新创建活动后,该活动将保留下来,您将获得正确的状态。

Ref:https://medium.com/androiddevelopers/viewmodels-a-simple-example-ed5ac416317e