Как отправить объект из одной операции Android в другую, используя Intents? - PullRequest
810 голосов
/ 26 января 2010

Как я могу передать объект пользовательского типа из одного Activity в другой, используя метод putExtra() класса Intent ?

Ответы [ 35 ]

0 голосов
/ 15 февраля 2019

В Колтине

Добавьте расширение kotlin в свой build.gradle.

apply plugin: 'kotlin-android-extensions'

android {
    androidExtensions {
        experimental = true
   }
}

Затем создайте свой класс данных следующим образом.

@Parcelize
data class Sample(val id: Int, val name: String) : Parcelable

Передача объекта с намерением

val sample = Sample(1,"naveen")

val intent = Intent(context, YourActivity::class.java)
    intent.putExtra("id", sample)
    startActivity(intent)

Получить объект с намерением

val sample = intent.getParcelableExtra("id")
0 голосов
/ 15 февраля 2019
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");
0 голосов
/ 20 декабря 2018
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 голосов
/ 01 декабря 2014

Я знаю, что уже немного поздно, но если вы хотите сделать это только для нескольких объектов, почему бы вам просто не объявить ваши объекты в качестве публичных статических объектов в вашей целевой деятельности?

public static myObject = new myObject();

а из вашей исходной активности просто дайте ему значение?

destinationActivity.myObject = this.myObject;

в исходной активности вы можете использовать его как любой глобальный объект. Из-за большого количества объектов это может вызвать проблемы с памятью, но для нескольких объектов я думаю, что это лучший способ сделать

0 голосов
/ 21 октября 2016

POJO class "Post " (обратите внимание, что он реализован Serializable)

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 класс "Комментарий" (Поскольку он является членом класса Post, также необходимо реализовать Serializable)

    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;
        }

    }

Затем в своем классе деятельности вы можете сделать следующее, чтобы передать объект в другое действие.

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);

        }
    });

В классе получателей "CommentsActivity" вы можете получить следующие данные

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