簡體   English   中英

如何在 android studio 中使用 parcelable 在活動之間傳遞數據

[英]How to pass data between activity using parcelable in android studio

我有一個 recyclerview 顯示電影列表,我希望當單擊的項目電影可以使用 parcelable 將數據傳遞給詳細信息

這是我的 viewHolderAdapter

public class MovieVHolder extends RecyclerView.ViewHolder {

        TextView mTxtTitleMovie, mTxtDescriptionMovie, mTxtDateMovie;
        ImageView mImgPosterMovie;

        public MovieVHolder(@NonNull final View itemView) {
            super(itemView);
            mTxtTitleMovie = itemView.findViewById(R.id.txt_title_movie);
            mTxtDescriptionMovie = itemView.findViewById(R.id.txt_desc_movie);
            mTxtDateMovie = itemView.findViewById(R.id.txt_date_movie);
            mImgPosterMovie = itemView.findViewById(R.id.img_movie);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent i = new Intent(context, DetailActivity.class);
                    context.startActivity(i);
                }
            });

        }

        public void bind(ListMovieEntity listMovieEntity) {
            mTxtTitleMovie.setText(listMovieEntity.getMovieTittle());
            mTxtDescriptionMovie.setText(listMovieEntity.getMovieDescription());
            mTxtDateMovie.setText(listMovieEntity.getMovieDate());
            Glide.with(context)
                    .load("https://image.tmdb.org/t/p/w185/"+listMovieEntity.getMoviePosterPath())
                    .into(mImgPosterMovie);
        }
    }

我在 model class 添加了 parcelable

像這樣改變itemviewclick

itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent i = new Intent(context, DetailActivity.class);
    //addthis       i.putExtra(DetailActivity.MOVIE, entListMovie.get(getPosition()));
                    context.startActivity(i);
                }
            });

並在細節上像這樣

添加這個

public static final String MOVIE = "movie";

在方法 onCreate() 添加這個

YourList yourList = getIntent().getParcelableExtra(MOVIE);

之后,只需設置數據

textview.setText(yourList.getBlaBla());

Intent 支持三種數據傳遞方式:

直接:將我們的數據直接放入意圖中

Bundle:創建一個bundle並在此處設置數據

Parcelable:這是一種“序列化”我們的 object 的方式。

傳遞數據:直接

 Intent i = new Intent(context, DetailActivity.class);
i.putExtra("title", mTxtTitleMovie.getText().toString();
i.putExtra("surname", edtSurname.getText().toString();
i.putExtra("email", edtEmail.getText().toString();
context.startActivity(i);

Intent i = new Intent(context, DetailActivity.class);
Bundle b = new Bundle();
b.putString("name", edtName.getText().toString());
b.putString("surname", edtSurname.getText().toString());
b.putString("email", edtEmail.getText().toString());
i.putExtra("personBdl", b);

context.startActivity(i);

傳遞數據:Parcelable

假設我們有一個名為 Person 的 class,它包含三個屬性:姓名、姓氏和 email。

現在,如果我們想通過這個 class 它必須像這樣實現Parcelable接口

public class Person implements Parcelable {
private String name;
private String surname;
private String email;
// Get and Set methods

@Override
public int describeContents() {
return hashCode();
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(surname);
dest.writeString(email);
}

// We reconstruct the object reading from the Parcel data
public Person(Parcel p) {
name = p.readString();
surname = p.readString();
email = p.readString();
}

public Person() {}

// We need to add a Creator
public static final Parcelable.Creator<person> CREATOR = new Parcelable.Creator<person>() {

@Override
public Person createFromParcel(Parcel parcel) {
return new Person(parcel);
}

@Override
public Person[] newArray(int size) {
return new Person[size];
}
};

現在我們簡單地傳遞這樣的數據:

Intent i = new Intent(EditActivity.this, ViewActivity.class);
Person p = new Person();
p.setName(edtName.getText().toString());
p.setSurname(edtSurname.getText().toString());
p.setEmail(edtEmail.getText().toString());
i.putExtra("myPers", p);
startActivity(i);

如您所見,我們只是將 object 人員放入 Intent 中。 當我們收到我們擁有的數據時:

Bundle b = i.getExtras();
Person p = (Person) b.getParcelable("myPers");
String name = p.getName();
String surname = p.getSurname();
String email = p.getEmail();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM