我需要一些我在学校认识到的Android应用程序的帮助。
此应用程序获取电话的所有联系人,列出他们并向其发送带有个性化姓名的个性化消息。 这项工作正常,但是,如果我想为特定联系人设置昵称或其他名字,则需要编辑联系人的名字。
为此,我将每个联系人放在Contact类上。我通过与RecyclerView项相关联的CheckBox选择了我的联系人,并在班级中为每个联系人设置了一个布尔值选择的联系人。
我可以在Contact类中使用特定方法获取所选联系人的列表,然后使用它向我发送消息(效果很好)。
当我需要编辑联系人的名字时,我可以在“回收者视图”项目上按一下以转到另一个活动,并向Intent发送关联的联系人以更改此名字。 我的新活动收到了我的联系人,并在EditText中显示此名称,我可以更改它。
Activity to change the first name
当我按下“ Valider le Changement”按钮来修改名字时,我使用了一个简单的“ contact.setPrenom(newPrenom)”,并且该按钮将我带回到了所选联系人的列表中,但是名字没有改变了。
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);
}
}