import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.mycodeapps.todotasks.Fragments.MainFragment;
import com.mycodeapps.todotasks.MainActivity;
import com.mycodeapps.todotasks.Model.taskModel;
import com.mycodeapps.todotasks.NewTaskActivity;
import com.mycodeapps.todotasks.R;
import com.mycodeapps.todotasks.Utils.DatabaseManager;
import java.util.List;
public class tasksAdapter extends RecyclerView.Adapter<tasksAdapter.MyViewHolder>{
private List<taskModel> tasksList;
private final MainActivity activity;
private final DatabaseManager db;
private final MainFragment fragment;
public tasksAdapter(DatabaseManager db, MainActivity activity, MainFragment fragment) {
this.db = db;
this.activity = activity;
this.fragment = fragment;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.task_layout,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
db.openDatabase();
final taskModel item = tasksList.get(position);
holder.task.setText(item.getTask());
holder.task.setChecked(toBoolean(item.getStatus()));
holder.task.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
item.setStatus(1);
db.updateStatus(item.getId(),1);
} else {
item.setStatus(0);
db.updateStatus(item.getId(), 0);
}
}
});
}
private boolean toBoolean(int n) {
return n != 0;
}
@Override
public int getItemCount() {
return tasksList.size();
}
public Context getContext() {
return activity;
}
@SuppressLint("NotifyDataSetChanged")
public void setTasks(List<taskModel> tasksList) {
this.tasksList = tasksList;
notifyDataSetChanged();
}
public void deleteItem(int position) {
taskModel item = tasksList.get(position);
Bundle bundle = new Bundle();
bundle.putInt("status", item.getStatus());
bundle.putString("task", item.getTask());
db.deleteTask(item.getId(),item.getStatus());
tasksList.remove(position);
notifyItemRemoved(position);
((MainFragment)fragment).upDateScore(db);
}
public void editItem(int position) {
taskModel item = tasksList.get(position);
Bundle bundle = new Bundle();
bundle.putInt("id", item.getId());
bundle.putString("task", item.getTask());
bundle.putInt("status", item.getStatus());
NewTaskActivity fragment = new NewTaskActivity();
fragment.setArguments(bundle);
fragment.show(activity.getSupportFragmentManager(), NewTaskActivity.TAG);
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
private final CheckBox task;
public MyViewHolder(View view) {
super(view);
task = view.findViewById(R.id.todoCheckBox);
}
}
}
Dans mon adapter je souhaiterais quand j'exécute deleteItem mettre a jour le textview taskcompleted de mon fragment. J'ai créé une méthode dans mon fragment mais je n'arrive pas a y acceder. Je bloque si vous avez une solution je suis preneur.
Edit: Les erreurs retournées sont que les references dans la methode updatescore sont introuvables (taskcompleted, les 2 getstrings done et pct) .
- Edité par MyCodeApps 2 mars 2022 à 17:51:45
actualiser textview dans un fragment
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.