932 Stimmen

Wie sendet man ein Objekt von einer Android-Aktivität zu einer anderen mit Intents?

Wie kann ich ein Objekt eines benutzerdefinierten Typs von einem Tätigkeit zu einem anderen unter Verwendung der putExtra() Methode der Klasse Absicht ?

0 Stimmen

@UMMA - Sie brauchen Ihre Fragen nicht ständig als "Community Wiki" zu markieren. Schauen Sie hier nach: meta.stackexchange.com/questions/11740/

1 Stimmen

@Paresh: Der von Ihnen angegebene Link ist defekt. Könnten Sie bitte eine Alternative angeben?

0 Stimmen

0voto

zawhtut Punkte 7967

POJO-Klasse "Post "(Beachten Sie, dass es serialisierbar implementiert ist)

package com.example.booklib;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import android.graphics.Bitmap;

public class Post implements Serializable{
    public String message;
    public String bitmap;
    List<Comment> commentList = new ArrayList<Comment>();
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getBitmap() {
        return bitmap;
    }
    public void setBitmap(String bitmap) {
        this.bitmap = bitmap;
    }
    public List<Comment> getCommentList() {
        return commentList;
    }
    public void setCommentList(List<Comment> commentList) {
        this.commentList = commentList;
    }

}

POJO-Klasse "Kommentar" (Da es ein Mitglied der Post-Klasse ist, muss es auch die Serializable implementieren)

    package com.example.booklib;

    import java.io.Serializable;

    public class Comment implements Serializable{
        public String message;
        public String fromName;
        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
        public String getFromName() {
            return fromName;
        }
        public void setFromName(String fromName) {
            this.fromName = fromName;
        }

    }

Dann können Sie in Ihrer Aktivitätsklasse wie folgt vorgehen, um das Objekt an eine andere Aktivität zu übergeben.

ListView listview = (ListView) findViewById(R.id.post_list);
listview.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Post item = (Post)parent.getItemAtPosition(position);
            Intent intent = new Intent(MainActivity.this,CommentsActivity.class);
            intent.putExtra("post",item);
            startActivity(intent);

        }
    });

In Ihrer Empfängerklasse "CommentsActivity" können Sie die Daten wie folgt abrufen

Post post =(Post)getIntent().getSerializableExtra("post");

-1voto

Alok Singh Punkte 594
Start another activity from this activity pass parameters via Bundle Object

Intent intent = new Intent(this, YourActivity.class);
Intent.putExtra(AppConstants.EXTRAS.MODEL, cModel);
startActivity(intent);
Retrieve on another activity (YourActivity)

ContentResultData cModel = getIntent().getParcelableExtra(AppConstants.EXTRAS.MODEL);

0 Stimmen

Bitte versuchen Sie, dies wird für mich arbeiten Hier Modell ist Gleichnis.

-1voto

Ashish Kumar Punkte 1046
We can send data one Activty1 to Activity2 with multiple ways like.
1- Intent
2- bundle
3- create an object and send through intent
.................................................
1 - Using intent
Pass the data through intent
Intent intentActivity1 = new Intent(Activity1.this, Activity2.class);
intentActivity1.putExtra("name", "Android");
startActivity(intentActivity1);
Get the data in Activity2 calss
Intent intent = getIntent();
if(intent.hasExtra("name")){
     String userName = getIntent().getStringExtra("name");
}
..................................................
2- Using Bundle
Intent intentActivity1 = new Intent(Activity1.this, Activity2.class);
Bundle bundle = new Bundle();
bundle.putExtra("name", "Android");
intentActivity1.putExtra(bundle);
startActivity(bundle);
Get the data in Activity2 calss
Intent intent = getIntent();
if(intent.hasExtra("name")){
     String userName = getIntent().getStringExtra("name");
}
..................................................
3-  Put your Object into Intent
Intent intentActivity1 = new Intent(Activity1.this, Activity2.class);
            intentActivity1.putExtra("myobject", myObject);
            startActivity(intentActivity1); 
 Receive object in the Activity2 Class
Intent intent = getIntent();
    Myobject obj  = (Myobject) intent.getSerializableExtra("myobject");

-1voto

ankish Punkte 1

Am einfachsten wäre es, einfach das Folgende zu verwenden, wobei das Element eine Zeichenkette ist:

intent.putextra("selected_item",item)

Zum Empfang:

String name = data.getStringExtra("selected_item");

3 Stimmen

Seine für String, Integer und etc nur aber ich will das Objekt und mit statischen Objekt seine nur möglich.

-5voto

Mothana Punkte 41

Ich weiß, es ist ein bisschen spät, aber wenn Sie dies nur für einige wenige Objekte tun möchten, warum deklarieren Sie nicht einfach Ihre Objekte als öffentliche statische Objekte in Ihrer Zielaktivität?

public static myObject = new myObject();

und aus Ihrer Quellenaktivität einfach einen Wert ableiten?

destinationActivity.myObject = this.myObject;

in Ihrer Quellaktivität können Sie es wie jedes andere globale Objekt verwenden. Bei einer großen Anzahl von Objekten kann es zu Speicherproblemen kommen, aber bei einer geringen Anzahl von Objekten halte ich dies für den besten Weg

2 Stimmen

Wenn Sie ein Objekt statisch machen, wird es als aktives Objekt markiert. JVM und DVM überspringen die Bereinigung dieser Ressource zum Zeitpunkt der Finalisierung (Mark and Weep-Algorithmus). Sie müssen dieses Objekt also manuell für die Speicherverwaltung löschen. KURZ GESAGT, KEIN GUTER ANSATZ

1 Stimmen

Ich habe klar gesagt, dass dieser Ansatz einige Speicherprobleme .... verursachen kann, aber für ein oder zwei Objekte können Sie es manuell auf Null setzen, keine große Sache!

0 Stimmen

Sie können es verwenden, wenn Sie mit dieser Einschränkung der Erstellung eines statischen Objekts einverstanden sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X