web-dev-qa-db-fra.com

Passer une activité à une autre

Comment passer des collections telles que ArrayList, etc. d'une Activity à une autre, comme nous le faisions auparavant, avec Strings, int à l'aide de la méthode d'intention putExtra?

Quelqu'un peut-il m'aider s'il vous plaît car je veux passer un List<String> d'un Activity à un autre?

9
Name is Nilay

Vous pouvez transmettre un ArrayList<E> de la même manière, si le type E est Serializable.

Vous appelez la putExtra (String name, Serializable value) de Intent pour stocker, et getSerializableExtra (String name) pour la récupération.

Exemple:

ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);

Dans l'autre activité:

ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");

Veuillez noter que la sérialisation peut entraîner des problèmes de performances: cela prend du temps et de nombreux objets seront alloués (et doivent donc être récupérés).

27
nhaarman

Vous devez d’abord créer une classe d’objet Parcelable, voir l’exemple

public class Student implements Parcelable {

        int id;
        String name;

        public Student(int id, String name) {
            this.id = id;
            this.name = name;

        }

        public int getId() {
            return id;
        }

        public String getName() {
            return name;
        }


        @Override
        public int describeContents() {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public void writeToParcel(Parcel dest, int arg1) {
            // TODO Auto-generated method stub
            dest.writeInt(id);
            dest.writeString(name);
        }

        public Student(Parcel in) {
            id = in.readInt();
            name = in.readString();
        }

        public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
            public Student createFromParcel(Parcel in) {
                return new Student(in);
            }

            public Student[] newArray(int size) {
                return new Student[size];
            }
        };
    }

Et la liste

ArrayList<Student> arraylist = new ArrayList<Student>();

Code de l'activité d'appel

Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("mylist", arraylist);
intent.putExtras(bundle);       
this.startActivity(intent);

Code sur l'activité appelée

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);   

    Bundle bundle = getIntent().getExtras();
    ArrayList<Student> arraylist = bundle.getParcelableArrayList("mylist");
}
13
Shahin ShamS

utilisez putExtra pour transmettre la valeur à une intention. utilisez la méthode getSerializableExtra pour récupérer les données comme ceci

Activité A:

ArrayList<String> list = new ArrayList<String>();

intent.putExtra("arraylist", list);
startActivity(intent);

Activité B:

ArrayList<String> list = getIntent().getSerializableExtra("arraylist");
4

J'ai essayé toutes les techniques proposées, mais aucune d'entre elles n'a fonctionné et a arrêté mon application, puis j'ai finalement succédé. Voici comment je l'ai fait ... Dans l'activité principale, j'ai fait ceci:

            List<String> myList...;
            Intent intent = new Intent...;
            Bundle b=new Bundle();
            b.putStringArrayList("KEY",(ArrayList<String>)myList);            
            intent_deviceList.putExtras(b);
            ....startActivity(intent);

Pour obtenir les données dans la nouvelle activité:

    List<String> myList...
    Bundle b = getIntent().getExtras();
    if (b != null) {
        myList = bundle.getStringArrayList("KEY");
    }

J'espère que cela aidera quelqu'un ...

4
niky_d

Pour passer ArrayList d’une activité à une autre, il faut inclure

intent.putStringArrayListExtra(KEY, list); //where list is ArrayList which you want to pass

et pour obtenir le ArrayList dans une autre activité, incluez

Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            temp = bundle.getStringArrayList(KEY); // declare temp as ArrayList
                }

vous pourrez passer ArrayList à travers cela. J'espère que cela vous sera utile.

0
AkashG