2017-10-19 18 views
-1

Je travaille sur un projet qui permet à l'utilisateur d'envoyer une chaîne d'une activité à une vue de liste dans une autre activité avec un bouton. Cependant, lorsque j'essaie d'envoyer des données d'une activité à la suivante, l'activité de réception remplace le dernier élément envoyé au lieu de l'ajouter à la vue de liste. Voici mon code: EnterInfoActivity.java:Ajouter une chaîne à ListView d'activité différente ne remplace que le premier élément au lieu d'en ajouter plus à la liste

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.Toast; 

import static com.example.kevin.myapplication.R.id.Done; 
import static com.example.kevin.myapplication.R.id.EnterInfo; 

public class EnterInfoActivity extends AppCompatActivity { 
ArrayAdapter<CharSequence> yearAdapter; 
Button Done; 
EditText Name; 
EditText PName; 
Spinner YearSpinner; 

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

    Name = (EditText) findViewById(R.id.Name); 
    PName = (EditText) findViewById(R.id.PName); 
    Done = (Button) findViewById(R.id.Done); 
    YearSpinner = (Spinner) findViewById(R.id.Year); 
    yearAdapter = ArrayAdapter.createFromResource(this,R.array.year_sequence, android.R.layout.simple_spinner_item); 
    yearAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    YearSpinner.setAdapter(yearAdapter); 



    Done.setOnClickListener(new View.OnClickListener() { 
     @Override 

     public void onClick(View v) { 

      SharedPreferences sharedPreferences = getSharedPreferences("ViewData", Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 
      editor.putString("newName", Name.getText().toString()); 
      editor.putString("newPName", PName.getText().toString()); 
      editor.putString("Year", YearSpinner.getSelectedItem().toString()); 
      editor.commit(); 
      finish(); 
     } 
    }); 
} 

}

et Heres ViewActivity.java:

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.ListViewCompat; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.util.ArrayList; 

public class ViewActivity extends AppCompatActivity { 
ListView lv; 
ArrayList<String> arrayList; 
ArrayAdapter<String> adapter; 
public static final String DEFAULT = " "; 

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

    SharedPreferences sharedPreferences = getSharedPreferences("ViewData", Context.MODE_PRIVATE); 


    String Name = sharedPreferences.getString("newName",DEFAULT); 
    String PName = sharedPreferences.getString("newPName",DEFAULT); 
    String Year = sharedPreferences.getString("Year",DEFAULT); 

    String PhotoInfo =(Name + " " + PName + " " + Year); 

    lv = (ListView) findViewById(R.id.LV_View); 
    arrayList = new ArrayList<String>(); 
    arrayList.add(PhotoInfo); 
    adapter = new ArrayAdapter<String>(ViewActivity.this, android.R.layout.simple_list_item_1, 
       arrayList); 
    lv.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

} 

}

+0

Vous na pas passer une liste que vous avez passé seulement trois et je n'ont combiné dans votre chaîne PhotoInfo – Xenolion

+0

lecture sur une application Android Cycle de vie: OnCreate - onStart - onResume ... Par la suite, je vous suggère de utiliser un 'BroadcastReceiver' pour envoyer de manière fiable des données à d'autres activités – rupps

Répondre

0

Dans ur arrayList vous avez toujours le dernier. Il n'y a pas de liste existante que vous ajoutez à, d'où son seul vous montrer la dernière

ArrayList<String> arrayList; 

--- 

arrayList = new ArrayList<String>(); 
arrayList.add(PhotoInfo); 

Les 2 dernières lignes u peut voir, u créent une nouvelle liste et en ajoutant simplement qu'une chaîne à lui. Par conséquent, vous pouvez juste voir le dernier.

0

Vous devez définir votre ArrayList comme statique et ne le renouvelez pas à chaque fois! vous devez juste le créer pour une fois et à chaque fois il suffit d'ajouter nouvel élément et appelez notifyDatasetChanged().

public class ViewActivity extends AppCompatActivity { 
ListView lv; 
//set arraylist as static and eager loading for it. 
public static ArrayList<String> arrayList=new ArrayList<String>(); 
ArrayAdapter<String> adapter; 
public static final String DEFAULT = " "; 

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

    SharedPreferences sharedPreferences = getSharedPreferences("ViewData", Context.MODE_PRIVATE); 


    String Name = sharedPreferences.getString("newName",DEFAULT); 
    String PName = sharedPreferences.getString("newPName",DEFAULT); 
    String Year = sharedPreferences.getString("Year",DEFAULT); 

    String PhotoInfo =(Name + " " + PName + " " + Year); 

    lv = (ListView) findViewById(R.id.LV_View); 
    //remove renew arraylist 
    arrayList.add(PhotoInfo); 
    adapter = new ArrayAdapter<String>(ViewActivity.this, android.R.layout.simple_list_item_1, 
       arrayList); 
    lv.setAdapter(adapter); 
    //its ok 
    adapter.notifyDataSetChanged(); 

} 
+1

Merci d'avoir résolu mon problème! – chowmein4u