package com.example.hussain.assignment4task1;
import android.os.Parcel;
import android.os.Parcelable;
import java.lang.reflect.Array;
import java.util.ArrayList;
public class Image implements Parcelable
{
private String imageName;
private String date;
public ArrayList<Image> images;
public Image(String imageName, String date, ArrayList<Image> images)
{
update(imageName, date, images);
}
public void update(String imageName, String date, ArrayList<Image> images)
{
this.imageName = imageName;
this.date = date;
this.images = images;
}
public String toString()
{
String str = "Image Name: "+ imageName;
str += "\nDate: " + date;
return str;
}
/** The following block of code parcels/unparcels data for distribution between activities */
/** Describe the contents in the parcel --
* interface forces implementation */
public int describeContents()
{
return 0;
}
public void writeToParcel(Parcel out, int flags)
{
out.writeString(imageName);
out.writeString(date);
out.writeList(images);
}
public static final Parcelable.Creator<Image> CREATOR =
new Parcelable.Creator<Image>()
{
public Image createFromParcel(Parcel in)
{
return new Image(in);
}
public Image[] newArray(int size)
{
return new Image[size];
}
};
/** Private constructor called internally only */
private Image(Parcel in)
{
imageName = in.readString();
date = in.readString();
}
}
これは、私が他のアクティビティの画像に渡す画像の詳細を挿入する私のアクティビティです。Androidスタジオ配列リスト内の特定のオブジェクトにデータを分割する
public void onBackPressed()
{
Log.i("IMAGE DETAILS", "Back Button Pressed");
storeImageDetails(); // to cover half filled forms
Intent resultIntent = new Intent(this, MainActivity.class);
// need an array list even if we put a single object only
ArrayList<Image> dataList = new ArrayList<Image>(4);
dataList.add(image);
resultIntent.putParcelableArrayListExtra("IMAGE_DATA", dataList);
setResult(RESULT_OK, resultIntent);
ImageDetailsActivity.super.onBackPressed(); // do not forget
}
/** This method will store all information entered */
private void storeImageDetails()
{
EditText imageNameText = (EditText) findViewById(R.id.imageNameText);
EditText dateText = (EditText) findViewById(R.id.dateText);
String imageName = imageNameText.getText().toString();
String date = dateText.getText().toString();
ArrayList<Image> dataList = new ArrayList<Image>();
if (image == null)
image = new Image(imageName, date, dataList);
else
image.update(imageName, date, dataList);
Log.i("IMAGE DETAILS CHANGED", image.toString());
}
私の主な活動には4つの画像があります。そのうちの1つをクリックすると、詳細を入力できるフォームが開き、戻るボタンを押すと画像名と日付だけが画像の下に表示されます。これはすべての画像で同じように表示されます。私はそれを作る方法を知りたいのですが、クリックした画像だけがそれに渡された詳細を取得し、他の画像は取得しません。個々の画像にデータを渡す分離性は私が把握したいものです。
'Image'オブジェクトは' Image'の子オブジェクトのリストが含まれていますが?それは本当に必要ですか?おそらくそのリストフィールドを静的にすることを意味しましたか? – marmor
また 'writeToParcel'では3つのフィールドを区画に入れていますが、' Image(Parcel in) 'コンストラクタでは2つのフィールドしか読んでいないので、それはバグです – marmor
これを忘れてしまいました。リストソリューションは本当に必要ではなく、その解決策もありませんでした。どのように私は個々にデータを画像に渡すのですか? –