Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保存已在recyler视图中选择的项目的状态(即使在应用程序关闭后)_Java_Android_Android Recyclerview - Fatal编程技术网

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));
}