从RecyclerView Intent更改对象实例值

我需要一些我在学校认识到的Android应用程序的帮助。

此应用程序获取电话的所有联系人,列出他们并向其发送带有个性化姓名的个性化消息。 这项工作正常,但是,如果我想为特定联系人设置昵称或其他名字,则需要编辑联系人的名字。

为此,我将每个联系人放在Contact类上。我通过与RecyclerView项相关联的CheckBox选择了我的联系人,并在班级中为每个联系人设置了一个布尔值选择的联系人。

我可以在Contact类中使用特定方法获取所选联系人的列表,然后使用它向我发送消息(效果很好)。

当我需要编辑联系人的名字时,我可以在“回收者视图”项目上按一下以转到另一个活动,并向Intent发送关联的联系人以更改此名字。 我的新活动收到了我的联系人,并在EditText中显示此名称,我可以更改它。

Selection of the contact

Activity to change the first name

当我按下“ Valider le Changement”按钮来修改名字时,我使用了一个简单的“ contact.setPrenom(newPrenom)”,并且该按钮将我带回到了所选联系人的列表中,但是名字没有改变了。

Intent on my RecyclerView

Validation button to change the first name

我的联系方式:

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;
    }
}

我的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();
    }
}

我的第四活动

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);
    }
}

i530151196 回答:从RecyclerView Intent更改对象实例值

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3141512.html

大家都在问