Java 如何保存已在recyler视图中选择的项目的状态(即使在应用程序关闭后)
我想做的是,即使在活动结束后,也在回收器视图中显示相同的选定项目,并且仅在再次单击时更改项目的颜色。现在,我已经实现了按一下改变颜色,但状态没有得到保存 这是我的适配器:Java 如何保存已在recyler视图中选择的项目的状态(即使在应用程序关闭后),java,android,android-recyclerview,Java,Android,Android Recyclerview,我想做的是,即使在活动结束后,也在回收器视图中显示相同的选定项目,并且仅在再次单击时更改项目的颜色。现在,我已经实现了按一下改变颜色,但状态没有得到保存 这是我的适配器: public class LightsRecyclerViewAdapter extends RecyclerView.Adapter<LightsRecyclerViewAdapter.ViewHolder> { // private List<Integer> mViewColors;
public class LightsRecyclerViewAdapter extends
RecyclerView.Adapter<LightsRecyclerViewAdapter.ViewHolder> {
// private List<Integer> mViewColors;
private List<String> mAnimals;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
// data is passed into the constructor
LightsRecyclerViewAdapter(Context context, List<String>
animals) {
this.mInflater = LayoutInflater.from(context);
this.mAnimals = animals;
}
// inflates the row layout from xml when needed
@Override
@NonNull
public ViewHolder onCreateViewHolder(@NonNull ViewGroup
parent, int viewType) {
View view = mInflater.inflate(R.layout.item, parent,
false);
return new ViewHolder(view);
}
// binds the data to the view and textview in each row
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int
position) {
// int color = mViewColors.get(position);
String animal = mAnimals.get(position);
// holder.myView.setBackgroundColor(color);
holder.myTextView.setText(animal);
}
// total number of rows
@Override
public int getItemCount() {
return mAnimals.size();
}
// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener {
View myView;
TextView myTextView;
ViewHolder(View itemView) {
super(itemView);
// myView = itemView.findViewById(R.id.colorView);
myTextView =
itemView.findViewById(R.id.tvAnimalName);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null)
mClickListener.onItemClick(view, getAdapterPosition());
}
}
// convenience method for getting data at click position
public String getItem(int id) {
return mAnimals.get(id);
}
// allows clicks events to be caught
public void setClickListener(ItemClickListener
itemClickListener) {
this.mClickListener = itemClickListener;
}
// parent activity will implement this method to respond to click events
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
公共类LightsRecycleServiceAdapter扩展
RecyclerView.适配器{
//私有列表mViewColors;
私人名单管理;
私人停车场;
私有项ClickListener McClickListener;
//数据被传递到构造函数中
LightsRecycleServiceAdapter(上下文,列表
(动物){
this.mInflater=LayoutInflater.from(上下文);
这个。mAnimals=动物;
}
//根据需要从xml扩展行布局
@凌驾
@非空
public ViewHolder onCreateViewHolder(@NonNull ViewGroup
父对象,int视图类型){
视图=最小充气器。充气(R.layout.item,父项,
假);
返回新的ViewHolder(视图);
}
//将数据绑定到每行的视图和文本视图
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,int
(职位){
//int color=mViewColors.get(位置);
字符串动物=mAnimals.get(位置);
//holder.myView.setBackgroundColor(颜色);
holder.myTextView.setText(动物);
}
//总行数
@凌驾
public int getItemCount(){
返回mAnimals.size();
}
//在屏幕外滚动视图时存储和回收视图
公共类ViewHolder扩展了RecyclerView.ViewHolder
实现View.OnClickListener{
查看我的视图;
文本视图myTextView;
ViewHolder(视图项视图){
超级(项目视图);
//myView=itemView.findViewById(R.id.colorView);
myTextView=
itemView.findViewById(R.id.tvAnimalName);
setOnClickListener(这个);
}
@凌驾
公共void onClick(视图){
if(mClickListener!=null)
onItemClick(视图,getAdapterPosition());
}
}
//在点击位置获取数据的简便方法
公共字符串getItem(int id){
返回mAnimals.get(id);
}
//允许捕获单击事件
public void setClickListener(ItemClickListener
itemClickListener){
this.mClickListener=itemClickListener;
}
//父活动将实现此方法以响应单击事件
公共接口项ClickListener{
void onItemClick(视图,int位置);
}
}
这是我的活动:
public class DevicesList extends AppCompatActivity implements
LightsRecyclerViewAdapter.ItemClickListener{
private LightsRecyclerViewAdapter adapter,adapter1;
TextView title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_devices_list);
title = (TextView)findViewById(R.id.textGrid);
// data to populate the RecyclerView with
ArrayList<Integer> viewColors = new ArrayList<>();
viewColors.add(Color.BLUE);
viewColors.add(Color.YELLOW);
viewColors.add(Color.MAGENTA);
viewColors.add(Color.RED);
viewColors.add(Color.BLACK);
ArrayList<String> Lab1LightsList = new ArrayList<>();
Lab1LightsList.add("Light 1");
Lab1LightsList.add("Light 2");
Lab1LightsList.add("Light 3");
Lab1LightsList.add("Light 4");
Lab1LightsList.add("Light 5");
ArrayList<String> Lab1ACList = new ArrayList<>();
Lab1ACList.add("AC 1");
Lab1ACList.add("AC 2");
Lab1ACList.add("AC 3");
Lab1ACList.add("AC 4");
Lab1ACList.add("AC 5");
ArrayList<String> Lab2LightsList = new ArrayList<>();
Lab2LightsList.add("Light 1");
Lab2LightsList.add("Light 2");
Lab2LightsList.add("Light 3");
Lab2LightsList.add("Light 4");
Lab2LightsList.add("Light 5");
Lab2LightsList.add("Light 6");
ArrayList<String> Lab2ACList = new ArrayList<>();
Lab2ACList.add("AC 1");
Lab2ACList.add("AC 2");
Lab2ACList.add("AC 3");
Lab2ACList.add("AC 4");
// set up the RecyclerView
RecyclerView recyclerView = findViewById(R.id.list1);
RecyclerView recyclerView1 =findViewById(R.id.list2);
LinearLayoutManager horizontalLayoutManagaer
= new LinearLayoutManager(DevicesList.this, LinearLayoutManager.HORIZONTAL, false);
LinearLayoutManager horizontalLayoutManager
= new LinearLayoutManager(DevicesList.this, LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(horizontalLayoutManagaer);
recyclerView1.setLayoutManager(horizontalLayoutManager);
Intent mIntent = getIntent();
int intValue = mIntent.getIntExtra("labno", 0);
if(intValue==0) {
adapter = new LightsRecyclerViewAdapter(this, Lab1LightsList);
adapter1 = new LightsRecyclerViewAdapter(this, Lab1ACList);
adapter.setClickListener(this);
adapter1.setClickListener(this);
recyclerView.setAdapter(adapter);
recyclerView1.setAdapter(adapter1);
}
if(intValue==1) {
adapter = new LightsRecyclerViewAdapter(this, Lab2LightsList);
adapter1 = new LightsRecyclerViewAdapter(this, Lab2ACList);
adapter.setClickListener(this);
adapter1.setClickListener(this);
recyclerView.setAdapter(adapter);
recyclerView1.setAdapter(adapter1);
}
}
@Override
public void onItemClick(View view, int position) {
Toast.makeText(this, "You clicked " +
adapter.getItem(position) + " on item position " + position,
Toast.LENGTH_SHORT).show();
view.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
}
}
公共类设备列表扩展了AppCompatActivity实现
LightsRecycleServiceAdapter.ItemClickListener{
专用灯循环服务适配器,适配器1;
文本视图标题;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u设备\u列表);
title=(TextView)findViewById(R.id.textGrid);
//用于填充RecyclerView的数据
ArrayList viewColors=新的ArrayList();
viewColors.add(Color.BLUE);
viewColors.add(Color.YELLOW);
viewColors.add(Color.MAGENTA);
viewColors.add(Color.RED);
viewColors.add(Color.BLACK);
ArrayList Lab1LightsList=新的ArrayList();
添加标签1灯光列表(“灯光1”);
标签1灯光列表添加(“灯光2”);
标签1灯光列表添加(“灯光3”);
标签1灯光列表添加(“灯光4”);
标签1灯光列表添加(“灯光5”);
ArrayList Lab1ACList=新的ArrayList();
LAB1clist.添加(“AC 1”);
LAB1clist.add(“AC 2”);
LAB1clist.添加(“AC 3”);
LAB1clist.添加(“AC 4”);
LAB1clist.添加(“AC 5”);
ArrayList Lab2LightsList=新的ArrayList();
LAB2灯光列表添加(“灯光1”);
LAB2灯光列表添加(“灯光2”);
LAB2灯光列表添加(“灯光3”);
LAB2灯光列表添加(“灯光4”);
LAB2灯光列表添加(“灯光5”);
Lab2LightsList.添加(“Light 6”);
ArrayList Lab2ACList=新的ArrayList();
Lab2Clist.添加(“AC 1”);
Lab2Clist.添加(“AC 2”);
Lab2Clist.添加(“AC 3”);
Lab2Clist.添加(“AC 4”);
//设置RecyclerView
RecyclerView RecyclerView=findViewById(R.id.list1);
RecyclerView RecyclerViewW1=findViewById(R.id.list2);
直线布局管理器水平布局管理器
=新的LinearLayoutManager(DeviceList.this,LinearLayoutManager.HORIZONTAL,false);
直线布局经理水平布局经理
=新的LinearLayoutManager(DeviceList.this,LinearLayoutManager.HORIZONTAL,false);
recyclerView.setLayoutManager(水平布局管理器);
RecycleServiceW1.setLayoutManager(水平布局管理器);
Intent minent=getIntent();
intValue=minent.getIntExtra(“labno”,0);
如果(intValue==0){
适配器=新的LightsRecycleServiceAdapter(此,Lab1LightsList);
adapter1=新光源循环使用适配器(此,Lab1 Clist);
adapter.setClickListener(此);
adapter1.setClickListener(此);
recyclerView.setAdapter(适配器);
回收器1.设置适配器(适配器1);
}
if(intValue==1){
适配器=新的LightsRecycleServiceAdapter(此,Lab2LightsList);
adapter1=新光源循环使用适配器(此为Lab2Clist);
adapter.setClickListener(此);
adapter1.setClickListener(此);
recyclerView.setAdapter(适配器);
回收器1.设置适配器(适配器1);
}
}
@凌驾
公共虚线单击(视图,int位置){
Toast.makeText(这个“您点击了”+
adapter.getItem(位置)+“在项目位置上”+位置,
吐司。长度(短)。show();
view.set
// save clicked item is a list and save it sharePreference.
List<Integer> clikedList = new ArrayList<>();
if (clicked item){
ClikedList.add(position)
}
String value = gson.toJson(list);
SharedPreferences prefs = context.getSharedPreferences("mylist",
Context.MODE_PRIVATE);
Editor e = prefs.edit();
e.putString("list", value);
e.commit();
// for getting cliked position list from SharePreference
SharedPreferences prefs = context.getSharedPreferences("mylist",
Context.MODE_PRIVATE);
String value = prefs.getString("list", null);
GsonBuilder gsonb = new GsonBuilder();
Gson gson = gsonb.create();
MyObject[] list = gson.fromJson(value, MyObject[].class);
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// suppose clicked position 4 u get from shaved cliked list
in here u neddd to retreive cliked list position and clored those item
int select = 4;
if (select == position) {
holder.itemView.setBackgroundColor(Color.BLUE);
Toast.makeText(context, "" + position, Toast.LENGTH_SHORT).show();
} else {
holder.itemView.setBackgroundColor(Color.parseColor("#214F4B"));
Toast.makeText(context, "" + position, Toast.LENGTH_SHORT).show();
}
holder.tv_title.setText(data.get(position));
}