У меня есть RecyclerViewer, который использует список. В списке есть флажки. Если пользователь нажимает флажки, обновленный список сохраняется в sharedPreferences. Когда я возвращаюсь к этому действию, флажки все еще отмечены, но когда я выбираю новые флажки, пропускаются только новые отмеченные флажки. Если я хочу, чтобы старые флажки также сохранялись, я должен снять их и перепроверить. Есть идеи почему?
Ниже приведен код.
public class InterestActivity extends AppCompatActivity {
private static final String TAG = "InterestActivity";
SharedPreferences prefs;
SharedPreferences.Editor mEditor;
String key = "Key";
//const
private static final int VERIFY_PERMISSIONS_REQUEST = 1;
//location
private FusedLocationProviderClient fusedLocationClient;
//Firebase
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mRef;
private FirebaseMethods mFirebaseMethods;
private String userID;
private Context mContext;
List<Interest> lstInterest;
StringBuffer interestList = null;
//RecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.interest);
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mContext = InterestActivity.this;
if (checkPermissionArray(Permissions.PERMISSIONS)) {
} else {
verifyPermissions(Permissions.PERMISSIONS);
}
//Firebase
setupFirebaseAuth();
//adapter = new RecyclerViewAdapter(this, lstInterest);
lstInterest = new ArrayList<>();
lstInterest.add(new Interest("BMX", R.drawable.bmx_tn, false));
lstInterest.add(new Interest("Bowling", R.drawable.bowling_tn, false));
lstInterest.add(new Interest("Camping", R.drawable.camping_tn, false));
lstInterest.add(new Interest("Dance", R.drawable.dance_tn, false));
lstInterest.add(new Interest("Fishing", R.drawable.fishing_tn, false));
lstInterest.add(new Interest("Frisbee Golf", R.drawable.frisbeegolf_tn, false));
lstInterest.add(new Interest("Golfing", R.drawable.golfing_tn, false));
lstInterest.add(new Interest("Hunting", R.drawable.hunting_tn, false));
lstInterest.add(new Interest("Kayaking", R.drawable.kayaking_tn, false));
lstInterest.add(new Interest("Mountain Biking", R.drawable.mountainbiking_tn, false));
lstInterest.add(new Interest("Programming", R.drawable.programming_tn, false));
lstInterest.add(new Interest("Rock Climbing", R.drawable.rockclimbing_tn, false));
lstInterest.add(new Interest("Skateboarding", R.drawable.skateboarding_tn, false));
lstInterest.add(new Interest("Slack Line", R.drawable.slackline_tn, false));
lstInterest.add(new Interest("Video Games", R.drawable.videogames_tn, false));
lstInterest.add(new Interest("Yoga", R.drawable.yoga_tn, false));
loadData();
RecyclerView interestRv = (RecyclerView) findViewById(R.id.interest_recyclerview_id);
final RecyclerViewAdapter interestAdapter = new RecyclerViewAdapter(this, lstInterest);
interestRv.setLayoutManager(new GridLayoutManager(this, 2));
interestRv.setAdapter(interestAdapter);
Button btnButton = (Button) findViewById(R.id.btnInterestSave);
btnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
interestList = new StringBuffer();
for (Interest i : interestAdapter.checkedInterest) {
interestList.append(i.getTitle());
interestList.append(",");
saveData();
Log.d(TAG, "onClick: interest adapter " + interestAdapter.checkedInterest);
}
if (interestAdapter.checkedInterest.size() > 0) {
Toast.makeText(InterestActivity.this, interestList.toString(), Toast.LENGTH_SHORT).show();
addUserInterest(interestList.toString());
}
Intent intent = new Intent(InterestActivity.this, MainActivity.class);
startActivity(intent);
//getUserLocation();
}
});
}
private void saveData() {
SharedPreferences sharedPreferences = getSharedPreferences("shared preference", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
String json = gson.toJson(lstInterest);
editor.putString("task list", json);
editor.apply();
}
private void loadData() {
SharedPreferences sharedPreferences = getSharedPreferences("shared preference", MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString("task list", null);
Type type = new TypeToken<List<Interest>>() {
}.getType();
lstInterest = gson.fromJson(json, type);
}
/*
`````````````````````````````````````firebase```````````````````````````````````````````````
*/
//Send data to firebase interest DB.
private void addUserInterest(String interest) {
Log.d(TAG, "addUserInterest: use to save interest to database user_interest_post");
mRef.child(mContext.getString(R.string.dbname_user_interest_post))
.child(userID)
.child(mContext.getString(R.string.string_interest))
.setValue(interest);
mRef.child("user_profile_post")
.child(userID)
.child("interest")
.setValue(interest);
}
Ниже я получаю проверенные состояния из recyclerViewer. Я считаю, что проблема заключается здесь.
holder.setItemClickListener(new ItemClickListener(){
@Override
public void onItemClick(View v, int pos){
CheckBox chk = (CheckBox) v;
if (chk.isChecked()) {
checkedInterest.add(mData.get(pos));
Log.d(TAG, "onItemClick: checked state 1 " + checkedInterest);
}else if(!chk.isChecked()){
checkedInterest.remove(mData.get(pos));
Log.d(TAG, "onItemClick: checked state 2 " + checkedInterest);
}
//Integer pos = (int) holder.chk.getTag();
//Toast.makeText(mContext, mData.get(position).getTitle() + " Clicked!", Toast.LENGTH_SHORT).show();
if (mData.get(pos).isSelected()) {
mData.get(pos).setSelected(false);
} else {
mData.get(pos).setSelected(true);
}
}
} );