Java 如何使用按钮单击保存多个复选框的状态
在我的应用程序中,我有一个Java 如何使用按钮单击保存多个复选框的状态,java,checkbox,android-recyclerview,Java,Checkbox,Android Recyclerview,在我的应用程序中,我有一个ArrayList的recyclerView,其中我在文本视图旁边设置了一个复选框。我想通过单击按钮保存复选框的状态,并将其加载到另一个活动中,所有这些都应该通过共享引用来完成 事实上,我没有意识到如何通过单击按钮保存SharedPrevennces中复选框的状态 注意:请记住我是乞丐 下面是显示我所做操作的代码 public class StudentListActivity extends AppCompatActivity { private static fin
ArrayList
的recyclerView
,其中我在文本视图旁边设置了一个复选框。我想通过单击按钮保存复选框的状态,并将其加载到另一个活动中,所有这些都应该通过共享引用来完成
事实上,我没有意识到如何通过单击按钮保存SharedPrevennces
中复选框的状态
注意:请记住我是乞丐
下面是显示我所做操作的代码
public class StudentListActivity extends AppCompatActivity {
private static final String DATETIME = "dateTime";
private RecyclerView recyclerView;
private RecyclerView.Adapter rAdapter;
private RecyclerView.LayoutManager layoutManager;
ArrayList<ListOfNames> listOfNames;
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
String t1 = "10";
String t2 = "100%";
Bundle bundle;
String subName;
Toolbar toolbar;
boolean[] items;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.student_list);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
bundle = getIntent().getExtras();
subName = bundle.getString("Subject Name");
if (bundle != null) {
getSupportActionBar().setTitle(subName);
}
loadData();
Calendar calendar = Calendar.getInstance();
String currentDate = DateFormat.getDateTimeInstance().format(calendar.getTime());
toolbar.setSubtitle(currentDate);
fabButton();
buildRecyclerView();
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(this, ScrollingActivity.class);
intent.putExtra("count", listOfNames.size());
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.changeDateTime:
handleDate();
return true;
case R.id.pastAttendances:
Intent intent = new Intent(this, PastAttendences.class);
intent.putExtra("Title", subName);
sharedPreferences = getSharedPreferences("MY_PREF", MODE_PRIVATE);
editor = sharedPreferences.edit();
String result = sharedPreferences.getString(DATETIME, null);
intent.putExtra("key", result);
editor.remove(DATETIME);
editor.apply();
startActivity(intent);
return true;
case R.id.saveButton:
final String toolbarDateTime = toolbar.getSubtitle().toString();
sharedPreferences = getSharedPreferences("MY_PREF", MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.putString(DATETIME, toolbarDateTime);
editor.apply();
return true;
}
return super.onOptionsItemSelected(item);
}
public void handelTime(final CharSequence charSequence) {
final Calendar calendar = Calendar.getInstance();
int Hour = calendar.get(Calendar.HOUR);
int Minute = calendar.get(Calendar.MINUTE);
boolean is24Hour = android.text.format.DateFormat.is24HourFormat(this);
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int Hour, int Minute) {
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.HOUR, Hour);
calendar1.set(Calendar.MINUTE, Minute);
CharSequence charSequence1 = android.text.format.DateFormat.format("HH:mm:ss a", calendar1);
toolbar.setSubtitle(charSequence + " " + charSequence1);
}
}, Hour, Minute, is24Hour);
timePickerDialog.show();
}
public void handleDate() {
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int date = calendar.get(Calendar.DATE);
DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int date) {
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.YEAR, year);
calendar1.set(Calendar.MONTH, month);
calendar1.set(Calendar.DATE, date);
CharSequence charSequence = android.text.format.DateFormat.format("dd-MMM-yyyy", calendar1);
handelTime(charSequence);
}
}, year, month, date);
datePickerDialog.show();
}
private void buildRecyclerView() {
recyclerView = findViewById(R.id.recyclerView2);
recyclerView.hasFixedSize();
layoutManager = new LinearLayoutManager(StudentListActivity.this);
rAdapter = new AdapterForStudentList(this, listOfNames);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(rAdapter);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
}
public void insertData(String text, String t1, String t2) {
ListOfNames lt = new ListOfNames(text, t1, t2);
if (listOfNames.contains(lt)) {
Toast.makeText(this, "Student Name Already exists!!", Toast.LENGTH_SHORT).show();
} else {
listOfNames.add(lt);
rAdapter.notifyDataSetChanged();
}
}
public void saveData() {
sharedPreferences = getSharedPreferences("SHARED PREF", MODE_PRIVATE);
editor = sharedPreferences.edit();
Gson gson = new Gson();
String json = gson.toJson(listOfNames);
editor.putString(subName, json);
editor.apply();
}
public void loadData() {
sharedPreferences = getSharedPreferences("SHARED PREF", MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString(subName, null);
Type type = new TypeToken<ArrayList<ListOfNames>>() {
}.getType();
listOfNames = gson.fromJson(json, type);
if (listOfNames == null) {
listOfNames = new ArrayList<>();
}
}
ListOfNames deletedItem = null;
ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
final int position = viewHolder.getAdapterPosition();
String name = listOfNames.get(position).getStudentName();
deletedItem = listOfNames.get(position);
listOfNames.remove(deletedItem);
sharedPreferences = getSharedPreferences("SHARED PREF", MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.remove("text");
saveData();
editor.apply();
rAdapter.notifyItemRemoved(position);
Snackbar.make(recyclerView, name + "Deleted", Snackbar.LENGTH_LONG)
.setAction("Undo", new View.OnClickListener() {
@Override
public void onClick(View v) {
listOfNames.add(position, deletedItem);
rAdapter.notifyItemInserted(position);
saveData();
}
}).show();
}
@Override
public void onChildDrawOver(@NonNull Canvas c, @NonNull RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
new RecyclerViewSwipeDecorator.Builder(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
.addSwipeLeftBackgroundColor(ContextCompat.getColor(StudentListActivity.this, R.color.my_background))
.addSwipeLeftActionIcon(R.drawable.ic_delete_black_24dp)
.create()
.decorate();
super.onChildDrawOver(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
};
public void fabButton() {
FloatingActionButton floatingActionButton = findViewById(R.id.fab2);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder b = new AlertDialog.Builder(StudentListActivity.this);
View view = getLayoutInflater().inflate(R.layout.dialogbox_frontpage, null);
final EditText editText = view.findViewById(R.id.editText);
b.setView(view);
b.setTitle("Student name");
b.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String text = editText.getText().toString().trim();
if (text.isEmpty()) {
Toast.makeText(StudentListActivity.this, "Please add subject name", Toast.LENGTH_SHORT).show();
} else {
insertData(text, t1, t2);
saveData();
}
}
});
b.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
b.setCancelable(false);
b.show();
}
});
}
公共类StudentListActivity扩展了AppCompatActivity{
私有静态最终字符串DATETIME=“DATETIME”;
私人回收站;
专用回收器查看适配器雷达;
private RecyclerView.LayoutManager LayoutManager;
ArrayList名称列表;
SharedReferences SharedReferences;
SharedReferences.Editor;
字符串t1=“10”;
字符串t2=“100%”;
束;
字符串子名称;
工具栏;
布尔[]项;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.student_列表);
toolbar=findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
bundle=getIntent().getExtras();
subName=bundle.getString(“主题名称”);
if(bundle!=null){
getSupportActionBar().setTitle(子名称);
}
loadData();
日历=Calendar.getInstance();
字符串currentDate=DateFormat.getDateTimeInstance().format(calendar.getTime());
toolbar.setSubtitle(当前日期);
fabButton();
buildRecyclerView();
}
@凌驾
public void onBackPressed(){
super.onBackPressed();
Intent Intent=新的Intent(这是ScrollingActivity.class);
intent.putExtra(“count”,listOfNames.size());
星触觉(意向);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单.主菜单,菜单);
返回true;
}
@凌驾
公共布尔值OnOptionItemSelected(@NonNull MenuItem item){
开关(item.getItemId()){
案例R.id.changeDateTime:
handleDate();
返回true;
病例R.id.过去就诊人数:
意向意向=新意向(此,PastAttentences.class);
意向。putExtra(“标题”,子名称);
SharedReferences=GetSharedReferences(“我的首选”,模式为私有);
editor=SharedReferences.edit();
字符串结果=SharedReferences.getString(日期时间,null);
意图。putExtra(“键”,结果);
删除(日期时间);
editor.apply();
星触觉(意向);
返回true;
案例R.id.saveButton:
最后一个字符串toolbarDateTime=toolbar.getSubtitle().toString();
SharedReferences=GetSharedReferences(“我的首选”,模式为私有);
editor=SharedReferences.edit();
editor.putString(DATETIME,toolbarDateTime);
editor.apply();
返回true;
}
返回super.onOptionsItemSelected(项目);
}
公共无效处理时间(最终CharSequence CharSequence){
最终日历=Calendar.getInstance();
int Hour=calendar.get(calendar.Hour);
int Minute=calendar.get(calendar.Minute);
布尔值is24Hour=android.text.format.DateFormat.is24HourFormat(此);
TimePickerDialog TimePickerDialog=newtimepickerdialog(这是newtimepickerdialog.onttimesetlistener(){
@凌驾
公共void onTimeSet(时间选择器视图,整数小时,整数分钟){
Calendar calendar1=Calendar.getInstance();
calendar1.set(Calendar.HOUR,HOUR);
calendar1.设置(Calendar.MINUTE,MINUTE);
CharSequence charSequence1=android.text.format.DateFormat.format(“HH:mm:ss a”,calendar1);
toolbar.setSubtitle(charSequence+“”+charSequence1);
}
},小时,分钟,是24小时);
timePickerDialog.show();
}
公共无效处理日期(){
最终日历=Calendar.getInstance();
int year=calendar.get(calendar.year);
int month=calendar.get(calendar.month);
int date=calendar.get(calendar.date);
DatePickerDialog DatePickerDialog=new DatePickerDialog(这是new DatePickerDialog.OnDateSetListener(){
@凌驾
公共void onDateSet(日期选择器视图、整数年、整数月、整数日期){
Calendar calendar1=Calendar.getInstance();
calendar1.set(Calendar.YEAR,YEAR);
calendar1.设置(Calendar.MONTH,MONTH);
calendar1.set(Calendar.DATE,DATE);
CharSequence CharSequence=android.text.format.DateFormat.format(“dd-MMM-yyyy”,calendar1);
手时(charSequence);
}
}年、月、日);
datePickerDialog.show();
}
私有void buildRecyclerView(){
recyclerView=findViewById(R.id.recyclerView2);
RecycleView.hasFixedSize();
layoutManager=新的LinearLayoutManager(StudentListActivity.this);
rAdapter=学生列表的新适配器(这是名称列表);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(rAdapter);
ItemTouchHelper ItemTouchHelper=新的ItemTouchHelper(simpleCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
}
公共void insertData(字符串文本、字符串t1、字符串t2){
ListOfNames lt=新的ListOfNames(文本,t1,t2);
if(名称列表包含(lt)){
Toast.makeText(这个“学生名已经存在!!”,Toast.LENGTH_SHORT.show();
}否则{
名称列表。添加(lt);
rAdapter.notifyDataSetChanged();
}
}
公共void saveData(){
sharedPreferences=getSharedPreferences(“共享优先”,模式\私有);
editor=SharedReferences.edit();
Gson Gson=新的Gson();
字符串json=gson.toJson(listOfNames);
编辑器.putString(s)
public class AdapterForStudentList extends RecyclerView.Adapter<AdapterForStudentList.StudentViewHolder> {
Context context;
private ArrayList<ListOfNames> mListOfNames;
public static class StudentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView studentName, attendence, percentage;
CheckBox mCheckedBox;
private ItemClickListener itemClickListener;
public StudentViewHolder(@NonNull View itemView) {
super(itemView);
studentName = itemView.findViewById(R.id.studentName);
attendence = itemView.findViewById(R.id.attendence);
percentage = itemView.findViewById(R.id.percentage);
mCheckedBox = itemView.findViewById(R.id.mCheckBox);
mCheckedBox.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener ic) {
itemClickListener = ic;
}
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, getLayoutPosition());
}
interface ItemClickListener {
void onItemClick(View v, int position);
}
}
public AdapterForStudentList(Context context, ArrayList<ListOfNames> listOfNames) {
this.context = context;
mListOfNames = listOfNames;
}
@NonNull
@Override
public StudentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.check_box_cardview, parent, false);
SharedPreferences preferences = context.getSharedPreferences("checkedItems", MODE_PRIVATE);
boolean valueBoolean = preferences.getBoolean("KEY", false);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("KEY", valueBoolean);
editor.apply();
return new StudentViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull StudentViewHolder holder, final int position) {
ListOfNames currentItems = mListOfNames.get(position);
holder.studentName.setText(currentItems.getStudentName());
holder.attendence.setText(currentItems.getAttendent());
holder.percentage.setText(currentItems.getPercetage());
holder.mCheckedBox.setChecked(currentItems.getChecked());
holder.setItemClickListener(new StudentViewHolder.ItemClickListener() {
@Override
public void onItemClick(View v, int position) {
CheckBox checkBox = (CheckBox) v;
ListOfNames currentItems = mListOfNames.get(position);
if (checkBox.isChecked()) {
currentItems.setChecked(true);
} else {
currentItems.setChecked(false);
}
}
});
holder.mCheckedBox.setChecked(getFromSp("mCheckedBox"+position));
holder.mCheckedBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
saveInSp("mCheckedBox"+position, isChecked);
}
});
}
@Override
public int getItemCount() {
return mListOfNames.size();
}
private boolean getFromSp(String key){
SharedPreferences preferences = context.getSharedPreferences("checkedItems", MODE_PRIVATE);
return preferences.getBoolean(key,false);
}
private void saveInSp(String key, boolean value) {
SharedPreferences preferences = context.getSharedPreferences("checkedItems", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(key, value);
editor.apply();
}
holder.mCheckedBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// ...
}
});
holder.mCheckedBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CheckBox checkBox = (CheckBox) view;
boolean isChecked = checkBox.isChecked();
// ...
}
});
public class AdapterForStudentList extends RecyclerView.Adapter<AdapterForStudentList.StudentViewHolder> {
private Context context;
private ArrayList<ListOfNames> mListOfNames;
public static class StudentViewHolder extends RecyclerView.ViewHolder {
public TextView studentName, attendence, percentage;
CheckBox mCheckedBox;
public StudentViewHolder(@NonNull View itemView) {
super(itemView);
studentName = itemView.findViewById(R.id.studentName);
attendence = itemView.findViewById(R.id.attendence);
percentage = itemView.findViewById(R.id.percentage);
mCheckedBox = itemView.findViewById(R.id.mCheckBox);
}
}
public AdapterForStudentList(Context context, ArrayList<ListOfNames> listOfNames) {
this.context = context;
mListOfNames = listOfNames;
}
@NonNull
@Override
public StudentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.check_box_cardview, parent, false);
return new StudentViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull StudentViewHolder holder, final int position) {
final ListOfNames currentItems = mListOfNames.get(position);
holder.studentName.setText(currentItems.getStudentName());
holder.attendence.setText(currentItems.getAttendent());
holder.percentage.setText(currentItems.getPercetage());
holder.mCheckedBox.setChecked(currentItems.getChecked());
holder.mCheckedBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CheckBox checkBox = (CheckBox) view;
boolean isChecked = checkBox.isChecked();
currentItems.setChecked(isChecked);
}
});
}
@Override
public int getItemCount() {
return mListOfNames.size();
}
}
public class ListOfNames {
// variables...
// Create a transient variable to hold the temporary state of the check box
private transient boolean tempChecked;
// constructor and other methods...
// Couple of methods for operations on temporary checks and actual checks
public void setTemporaryChecked(boolean checked) {
tempChecked = checked;
}
public boolean getTemporaryChecked() {
return tempChecked;
}
public void checkedToTemporaryChecked() {
tempChecked = checked;
}
public void temporaryCheckedToChecked() {
checked = tempChecked;
}
}
// Get the temporary checked value instead of the actual one
// (Because you know, RecyclerView recycles views)
holder.mCheckedBox.setChecked(currentItems.getTemporaryChecked());
holder.mCheckedBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CheckBox checkBox = (CheckBox) view;
boolean isChecked = checkBox.isChecked();
// Set the temporary checked instead
currentItems.setTemporaryChecked(isChecked);
}
});
public void loadData() {
// ...
// Set our temporary checks
// Important because transient variables don't get included in Json string
for (ListOfNames current: listOfNames)
current.checkedToTemporaryChecked();
}
case R.id.saveButton:
// ...
// Convert temporary checks to actual checks
for (ListOfNames current: listOfNames)
current.temporaryCheckedToChecked();
saveData();
return true;
// ...