Partage
  • Partager sur Facebook
  • Partager sur Twitter

actualiser textview dans un fragment

    2 mars 2022 à 14:33:17

    Bonjour je cherche a actualiser un textview dans un fragment après la suppression d'un élément d'une liste.

    Mon fichier MainFragment:

    import android.os.Bundle;
    import androidx.fragment.app.Fragment;
    
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import com.mycodeapps.todotasks.R;
    import com.mycodeapps.todotasks.Utils.DatabaseManager;
    
    
    public class MainFragment extends Fragment{
        private TextView taskCompleted;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView =  inflater.inflate(R.layout.fragment_main, container, false);
            taskCompleted = rootView.findViewById(R.id.tasksCompleted);
            DatabaseManager db;
            db = new DatabaseManager(getContext());
            db.openDatabase();
            upDateScore(db);
            return rootView;
        }
    
        public void upDateScore(DatabaseManager db){
            Log.i("DEBUG", (String) this.taskCompleted.getText());
            String pctScore = getString(R.string.done)+" "+db.readPctScore()+getString(R.string.pct);
            taskCompleted.setText(pctScore);//affectation du pourcentage
            Log.i("DEBUG", (String) this.taskCompleted.getText());
            db.close();
        }
    }


    Mon adapter:

    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

    • Partager sur Facebook
    • Partager sur Twitter

    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.
    • Editeur
    • Markdown