我有一个自定义对象数组,以在回收器视图中显示,我正在使用GridLayout管理器作为recylerview并显示(2x4),(3x3)等正方形。 当用户单击这些正方形时,颜色会更改。
但是当屏幕定向时,视图会刷新。
我的问题是在屏幕方向显示时如何保留此数据(所选正方形的颜色)?
答案 0 :(得分:1)
创建接口:
public interface ClickCallback {
void onItemClicked(String id);
}
在您的活动中创建一个回调并将其传递给适配器,如下所示:
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)
在您的适配器中不要忘记设置OnClickListener并调用适当的方法,就像这样:
public ListItemViewHolder(View itemView) {
super(itemView);
//your code
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback.onItemClicked(getAdapterPosition());
}
});
}
}
在OnCreate中提取您的颜色数据:
public void onCreate(Bundle bundle) {
if (bundle != null) {
value = bundle.getInt("color");
}
}
答案 1 :(得分:0)
答案 2 :(得分:0)
“但是当屏幕定向时,视图会刷新。”
您可以有一个ViewModel类,该类存储数据的数组列表,包括它们的当前状态。通过轮播重新创建活动后,该活动将保留下来,您将获得正确的状态。
Ref:https://medium.com/androiddevelopers/viewmodels-a-simple-example-ed5ac416317e