Изменить значение экземпляра объекта из RecyclerView Intent - PullRequest
0 голосов
/ 08 ноября 2019

Мне нужна помощь с приложением Android, которое я реализовал в школе.

Это приложение получает все контакты телефона, перечисляет их и отправляет персонализированное сообщение выбранным контактам с их именами. Это работало нормально, но мне нужно отредактировать имя контакта, если я хочу установить псевдоним или другое имя для конкретного контакта.

Для этого я помещаю каждый контакт в класс контактов. Я выбрал свои контакты с помощью флажка, связанного с моим элементом RecyclerView, и установил выбранный контакт с логическим значением в классе (для каждого контакта).

Я могу получить список выбранных контактов с определенным методом в моем контактекласс, и я использую его для отправки мне сообщений (и это нормально работает).

Когда мне нужно отредактировать имя моего контакта, я могу нажать на свой элемент Recycler View, чтобы перейти к другому занятию и отправить сНамерение связанного контакта изменить это имя. Моя новая деятельность получает мой контакт, показывает это имя в EditText, и я могу изменить его.

Выбор контакта

Деятельность по изменению имени

Когда я нажимаю кнопку «Valider le Changement», чтобы изменить имя, я использую простой «contact.setPrenom (newPrenom)», и кнопка возвращает меня к списку выбранных контактов. , но имя не изменилось.

Намерение на моем RecyclerView

Кнопка подтверждения для изменения имени

Класс моего контакта:

package com.example.apps2;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Contact implements Serializable {
    private String nom;
    private String prenom;
    private String numeroTelephone;
    private boolean isSelected = false;

    private static List listContacts = new ArrayList();
    private static int nbContact;

    public Contact(String nom, String prenom, String telephone) {
        this.nom = nom;
        this.prenom = prenom;
        this.numeroTelephone = telephone;
        nbContact++;
        // On ajoute le contact à la liste des contacts
        listContacts.add(this);
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public void setNumeroTelephone(String numeroTelephone) {
        this.numeroTelephone = numeroTelephone;
    }

    public void setSelected(boolean selected) {

        this.isSelected = selected;
    }
    public String getNom() {

        return this.nom;
    }
    public String getPrenom() {

        return this.prenom;
    }
    public String getTelephone() {

        return this.numeroTelephone;
    }
    public static int getNbContact() {

        return nbContact;
    }
    public boolean getSelected() {

        return this.isSelected;
    }
    // Création d'une méthode permettant de réinitialiser les contacts et leur nombre
    public static void clearContacts() {
        listContacts.clear();
        nbContact = 0;
    }
    // Création d'une méthode permettant d'obtenir l'ensemble des contacts sélectionnés
    public static List<Contact> getSelectedContacts() {
       List<Contact> selectedContacts = new ArrayList<Contact>();
       selectedContacts.clear();
       for(int i = 0; i <= listContacts.size()-1; i++) {
           Contact contact = (Contact) listContacts.get(i);
           if(contact.getSelected()) {
               selectedContacts.add(contact);
           }
        }
       return selectedContacts;
    }
}

My RecyclerView

package com.example.apps2;

import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

// On créé un adapter pour notre liste de contact qui met en relation le layout d'un élément du RecyclerView final avec les données transmises par la liste de contacts
public class SelectedContactAdapter extends RecyclerView.Adapter<SelectedContactAdapter.SelectedContactViewHolder> {
    private List<Contact> listContact;

    public static class SelectedContactViewHolder extends RecyclerView.ViewHolder {
        // On déclare nos TextView
        TextView nom;
        TextView prenom;

        // On associe les TextView utilisées dans le layout aux variables de notre ViewHolder
        public SelectedContactViewHolder(@NonNull View itemView) {
            super(itemView);
            nom = itemView.findViewById(R.id.contact_nom);
            prenom = itemView.findViewById(R.id.contact_prenom);
        }
    }

    public SelectedContactAdapter(List<Contact> listContact) {
        this.listContact = listContact;
    }

    @NonNull
    @Override
    public SelectedContactViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // On récupère notre layout qui nous sert à créer visuellement chaque élément de notre liste
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_selected_contacts_item, parent, false);
        return new SelectedContactViewHolder(view);
    }


    @Override
    public void onBindViewHolder(@NonNull final SelectedContactViewHolder holder, final int position) {
        // On indique à nos TextView de prendre pour valeur les éléments associés à notre classe Contact
        final Contact contact = listContact.get(position);
        holder.nom.setText(contact.getNom());
        holder.prenom.setText(contact.getPrenom());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(), "Appuyé " + contact.getPrenom(), Toast.LENGTH_SHORT).show();

                Intent intent = new Intent(v.getContext(), FourthActivity.class);
                intent.putExtra("contact", contact); // My contact is serialized
                v.getContext().startActivity(intent);
            }
        });
    }

    // Comptage du nombre d'objets présents dans notre liste de contacts
    @Override
    public int getItemCount() {
        return listContact.size();
    }
}

My FourthActivity

package com.example.apps2;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;


public class FourthActivity extends AppCompatActivity {
    private EditText editTextContactName;
    private TextView editContactFullName;
    private Contact contact;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fourth); // association du layout principal à la MainActivity

        // On récupère l'intent envoyé depuis le recyclerview
        Intent intent = getIntent();
        if(intent != null) { // On vérifie qu'il n'est pas null
            if(intent.hasExtra("contact")) { // On vérifie qu'il dispose bien d'un extra, ici le contact sélectionné
                contact = (Contact) intent.getSerializableExtra("contact"); // On récupère le contact
                editTextContactName = findViewById(R.id.editContactName); // On récupère l'editText utilisé dans le layout de l'activité
                editTextContactName.setText(contact.getPrenom()); // On associe à l'editText qu'il doit prendre comme valeur par défaut le prénom du contact

                editContactFullName = findViewById(R.id.editContactFullName); // On récupère la textView qui sert à afficher le nom entier du contact à éditer
                editContactFullName.setText(contact.getPrenom()+" "+contact.getNom()); // On lui associe le prénom et le nom du contact
            }
        }

        // On récupère le bouton de validation de modification du prénom du contact
        Button validEditContact = findViewById(R.id.validEditContact);
        validEditContact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String newPrenom = editTextContactName.getText().toString();
                if(newPrenom.length() > 0) {
                    //System.out.println("Ancien prenom : "+ contact.getPrenom()); <-- the current first name is here and OK
                    contact.setPrenom(newPrenom);
                    //System.out.println("Nouveau prenom : "+ contact.getPrenom()); <-- the new first name is correctly changed
                    Intent intent = new Intent(v.getContext(), SecondActivity.class);
                    startActivity(intent);
                } else {
                    Toast.makeText(v.getContext(), "Le prénom ne peut pas être vide.", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    // Méthode permettant de revenir à la liste des contacts sélectionnés si on annule l'édition d'un contact
    public void returnToThirdActivity(View view) {
        Intent intent = new Intent(this, ThirdActivity.class);
        startActivity(intent);
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...