Problème android .

Fermé
alexandra883 Messages postés 1 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 14 décembre 2015 - Modifié par baladur13 le 14/12/2015 à 16:40
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 15 déc. 2015 à 09:38
Bonjour,

J'ai un petit problème pour finir mon projet Android Studio...
Je suis étudiante en DUT R&T et nous avons comme projet de creer une liste de contact où nous pouvons : ajouter , supprimer , modifier et appeler un contact sélectionné ou annuler la sélection.
Le bouton annulé fonctionne.
Le bouton ok fonctionne également.

Mais le bouton modifier , il le modifie dans le toast mais pas dans l'affichage et je comprend pas pourquoi ...

Le bouton supprimer , appeler et ajouter ne marchent pas . J'ai donc enlever du code ceux là et je cherche toujours comment faire ...

Je vous affiche les codes , si vous pouviez m'aider , c'est à rendre pour demain ...

La classe Contact :
package com.alexandra883.contact;

import java.io.Serializable;


/**
 * Created by e1401506 on 22/10/2015.
 */
public class Contact implements Serializable {
    private String nom;
    private String prenom;
    private String tel;

    public Contact (String nom, String prenom, String tel){
        this.nom = nom;
        this.prenom = prenom;
        this.tel = tel;
    }

    public String getNom(){
        return nom;
    }

    public String getPrenom() {
        return prenom;
    }

    public String getTel() {
        return tel;
    }

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

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

    public void setTel (String tel){
        this.tel = tel;
    }
    public String toString() {
        return this.nom + this.prenom + this.tel;
    }



}//RIEN EN DESSOUS


La classe MainActivity :
package com.alexandra883.contact;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.example.alexandra883.contact.R;
// getIntent().getSerializableExtra()

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    //Attribut CheeseAdapter
    private ContactAdapter adapter = new ContactAdapter(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView list = (ListView) findViewById(R.id.listView);
        list.setAdapter(adapter);
        list.setOnItemClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void contact1 (View v){
        Intent monIntent = new Intent(this,ContactAdapter.class);
        startActivityForResult(monIntent, 102);
    }

    public void contactAjoute (View v){
        Intent monIntent = new Intent(this,ContactAdapter.class);
        startActivityForResult(monIntent, 101);
    }

    //Gestion des evenements
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Contact eltClique= (Contact) adapter.getItem(position);
        Toast.makeText(this, eltClique.toString(), Toast.LENGTH_SHORT).show();
        //Renvoi vers ContactActivity
        Intent a= new Intent(this,ContactActivity.class);
        a.putExtra("contact", eltClique);
        startActivityForResult(a, 100);

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Vérification du code de retour
        // Vérifie que le résultat est OK
        if(requestCode == 100) {
            if (resultCode == RESULT_OK) {
                // On récupére la balise de l'intent data
                Contact contact = (Contact) data.getSerializableExtra("contact");
                adapter.set(data.getIntExtra("position", -1), contact);

                //Rafraichir la page après modifs
                adapter.notifyDataSetChanged();

                // Affichage du résultat
                Toast.makeText(this, contact.toString(), Toast.LENGTH_SHORT).show();


                // Si l'activité est annulé
            }
            else if (resultCode == RESULT_CANCELED) {
                // On affiche que l'opération est annulée
                Toast.makeText(this, "Opération annulée", Toast.LENGTH_SHORT).show();
            }
        }
    }
    //

}//RIEN EN DESSOUS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


La classe ContactActivity :
public class ContactActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact);

        Contact c1 = (Contact) getIntent().getSerializableExtra("contact");
        TextView ctc = (TextView) findViewById(R.id.editText);
        TextView ctc1 = (TextView) findViewById(R.id.editText2);
        TextView ctc2 = (TextView) findViewById(R.id.editText3);

        ctc.setText(c1.getNom());
        ctc1.setText(c1.getPrenom());
        ctc2.setText(c1.getTel());
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_contact, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    //-------------BOUTON OK---------------------------------------------------------------------
    public void actionOK(View v){
        Contact toto = new Contact("","","");

        //Recuperer et retourner le nom grâce aux items
        EditText it = (EditText) findViewById(R.id.editText);
        String nom = it.getText().toString();
        toto.setNom(nom);

        //Recuperer et retourner le prenom grâce aux items
        EditText it1 = (EditText) findViewById(R.id.editText2);
        String prenom = it1.getText().toString();
        toto.setPrenom(prenom);

        //Recuperer et retourner le telephone grâce aux items
        EditText it2 = (EditText) findViewById(R.id.editText3);
        String tel = it2.getText().toString();
        toto.setTel(tel);

        //Ajouter un extra (data) permettant d'echanger une info avec MainActivity
        // Ajout des balises correspondant au contact modifié
        Intent data = new Intent();
        data.putExtra("contact", toto) ;


        // Intent contact = getIntent();
        data.getIntExtra("contact", -1);
        data.putExtra("contact", toto);

        //Je renvoye maintenant le résultat
        setResult(RESULT_OK, data);
        finish();
    }

    //------------BOUTTON ANNULER-------------------------------------------------------------------

    public void actionAnnuler (View v) {
        setResult(RESULT_CANCELED);
        finish();
    }

}//RIEN EN DESSOUS


La classe ContactAdapter

package com.alexandra883.contact;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.alexandra883.contact.Contact;
import com.example.alexandra883.contact.R;

import java.util.ArrayList;

/**
 * Created by e1401506 on 22/10/2015.
 */
public class ContactAdapter extends BaseAdapter{

    //Attribut Context
    private Context cont ;
    //Attribut  (ArrayList<String>)
    private ArrayList<Contact> listeContact = new ArrayList<>();
    //Constructeur
    public ContactAdapter (Context c) {
        this.cont=c;
        Contact Bernard = new Contact ("Bernard ", "Benoit ", "0630124578");
        Contact Muller = new Contact("Muller ", "Veronique ", "0600112244");
        Contact Jean = new Contact ("Jean ", "Eude ", "0612345678");
        Contact Hoert = new Contact ("Hoert ", "JC ", "0612457896");

        this.listeContact.add(Bernard);
        this.listeContact.add(Muller);
        this.listeContact.add(Jean);
        this.listeContact.add(Hoert);
    }
    @Override
    public int getCount() {
        return listeContact.size();
    }

    @Override
    public Object getItem(int position) {
        return listeContact.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // convertView null ?
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) cont.getSystemService
                    (Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.presentation, null);
        }
        // Recuperation de litem a la position
        String val = listeContact.get(position).toString();
        // Recuperation du composant (ici un TextView)
        TextView itemView = (TextView) convertView.findViewById(R.id.textView2);
        // Mise en place de laffichage
        itemView.setText(val);
        return convertView;
    };


    public boolean add(Contact object) {
        return listeContact.add(object);
    }

    public Contact get(int index) {
        return listeContact.get(index);
    }

    public Contact remove(int index) {
        return listeContact.remove(index);
    }

    public int size() {
        return listeContact.size();
    }

    public Contact set(int index, Contact object) {
        return listeContact.set(index, object);
    }
}//RIEN EN DESSOUS !!!!!!!!!!!!!!!!!!!!!



Le layout activity_contact
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.e1401506.contact.ContactActivity">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="CONTACT"
        android:id="@+id/textView3"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ok"
        android:id="@+id/button"
        android:onClick="actionOK"
        android:layout_alignTop="@+id/button4"
        android:layout_centerHorizontal="true"
        />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:text="Nom"
        android:ems="10"
        android:id="@+id/editText"
        android:layout_marginTop="53dp"
        android:layout_below="@+id/textView3"
        android:layout_alignLeft="@+id/editText2"
        android:layout_alignStart="@+id/editText2" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:text="Prenom"
        android:ems="10"
        android:id="@+id/editText2"
        android:layout_below="@+id/editText"
        android:layout_alignLeft="@+id/editText3"
        android:layout_alignStart="@+id/editText3" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:text="Telephone"
        android:ems="10"
        android:id="@+id/editText3"
        android:layout_below="@+id/editText2"
        android:layout_alignLeft="@+id/textView3"
        android:layout_alignStart="@+id/textView3" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Nom"
        android:id="@+id/textView4"
        android:layout_alignTop="@+id/editText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Prénom"
        android:id="@+id/textView5"
        android:layout_below="@+id/editText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Téléphone"
        android:id="@+id/textView6"
        android:layout_alignTop="@+id/editText3"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Annuler"
        android:id="@+id/button2"
        android:layout_alignTop="@+id/button4"
        android:layout_toRightOf="@+id/textView4"
        android:layout_toEndOf="@+id/textView4"
        android:onClick="actionAnnuler"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Appeler"
        android:id="@+id/button3"
        android:layout_alignParentBottom="true"
        android:layout_alignLeft="@+id/editText3"
        android:layout_alignStart="@+id/editText3"
        android:layout_marginBottom="76dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Supprimer"
        android:id="@+id/button4"
        android:layout_above="@+id/button3"
        android:layout_toRightOf="@+id/textView3"
        android:layout_toEndOf="@+id/textView3" />

</RelativeLayout>


Le layout activity_main
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout android:layout_height="wrap_content"
        android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
            android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton android:id="@+id/fab"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>


et le layout presentation

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView2" />
</LinearLayout>


ainsi que le layout content_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

    <TextView android:text="Hello World!" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>



Merci d'avance !!!!!


A voir également:

1 réponse

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
15 déc. 2015 à 09:38
Hello,

Je n'ai pas tout regardé, mais voici quelques pistes

Le "Click to Call" se fait avec un intent:
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+txtPhn.getText().toString()));
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(callIntent);

Ne pas oublier la permission
android.permission.CALL_PHONE
dans le Manifest.

Ensuite, pour rafraichir l'écran après modification, il faut appeler
notifyDataSetChanged()
sur ton adapter.

Concernant le bouton Ajouter, normal que cela ne fonctionne pas:
    public void contactAjoute (View v){
        Intent monIntent = new Intent(this,ContactAdapter.class);
        startActivityForResult(monIntent, 101);
    }

Si tu regarde les paramètres de l'intent, il faut passer le contexte (ou l'Activity parente) et le type d'Activity à créer. Donc, à la place de
ContactAdapter.class
, il faut passer
ContactActivity.class
.

En espérant que cela t'aide à avancer.
0