So I have a recyclerview list of card views.I am trying to update the text time text in each view when the user clicks the card, and then reset it back when time has past. I set up an internal method in recyclerviewadapter but when I call updateTimes (calling from fragment), it does not reset the text back. Can someone instruct me on what I'm doing wrong?
import java.util.ArrayList;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.net.Uri;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import java.util.Calendar;
import android.content.Intent;
import java.text.SimpleDateFormat;
import java.util.Locale;
public class RecyclerAdapter extends RecyclerView.Adapter<FaucetHolder> {
private ArrayList<Faucet> faucets;
private Context context;
private SharedPreferences sharedPref;
private String dateFormat = "h:mm a";
public RecyclerAdapter(ArrayList<Faucet> faucetsI, Context context) {
this.faucets = faucetsI;
this.context = context;
}
@Override
public FaucetHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_view, viewGroup, false);
FaucetHolder f = new FaucetHolder(v);
return f;
}
@Override
public void onBindViewHolder(FaucetHolder f, int k) {
final Faucet faucet = faucets.get(k);
f.titleText.setOnClickListener(new View.OnClickListener() {
public void onClick(View btn) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(faucet.getLink()));
setRenewal(faucet);
notifyDataSetChanged();
context.startActivity(intent);
}
});
f.titleText.setText(faucet.getName());
sharedPref = context.getSharedPreferences("myPref", 0);
String time = sharedPref.getString(faucet.getSPName(), "could not retrieve time");
Log.e("tree", time);
f.timeText.setText(time);
}
@Override
public int getItemCount() {
return faucets.size();
}
private void setRenewal(Faucet g) {
sharedPref = context.getSharedPreferences("myPref", 0);
SharedPreferences.Editor edit = sharedPref.edit();
Calendar c = Calendar.getInstance();
long current = c.getTimeInMillis();
String x = sharedPref.getString(g.getSPName(), null);
long future = current + g.getLength();
g.setCT(future);
c.setTimeInMillis(future);
SimpleDateFormat df = new SimpleDateFormat(dateFormat, Locale.US);
String date = df.format(c.getTime());
edit.putString(g.getSPName(), date).commit();
}
public void updateTimes() {
sharedPref = context.getSharedPreferences("myPref", 0);
SharedPreferences.Editor edit = sharedPref.edit();
for ( Faucet f : faucets ) {
boolean m = checkifPast(f);
if ( m == true ) {
edit.putString(f.getSPName(), "Ready!").commit();
}
}
notifyDataSetChanged();
}
private boolean checkifPast(Faucet f) {
Calendar c = Calendar.getInstance();
long comp = c.getTimeInMillis();
if ( comp > f.getCT() ) {
return false;
}
return true;
}
}
Fragment Code
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
v = inflater.inflate(R.layout.faucetcards, container, false);
r = (RecyclerView) v.findViewById(R.id.RecyclerView);
rA = new RecyclerAdapter(generateCards(), getActivity());
lm = new LinearLayoutManager(getActivity());
r.setAdapter(rA);
r.setLayoutManager(lm);
sharedPref = getActivity().getPreferences(0);
return v;
}
@Override
public void onResume()
{
rA.updateTimes();
super.onResume();
}