私のonClick()
メソッドのコードには次のものがあります
List<Question> mQuestionsList = QuestionBank.getQuestions();
次のように、この行の後に意図があります:
Intent resultIntent = new Intent(this, ResultActivity.class);
resultIntent.putParcelableArrayListExtra("QuestionsExtra", (ArrayList<? extends Parcelable>) mQuestionsList);
startActivity(resultIntent);
あるアクティビティから別のアクティビティにインテントでこの質問リストを渡す方法がわからないMy Questionクラス
public class Question {
private int[] operands;
private int[] choices;
private int userAnswerIndex;
public Question(int[] operands, int[] choices) {
this.operands = operands;
this.choices = choices;
this.userAnswerIndex = -1;
}
public int[] getChoices() {
return choices;
}
public void setChoices(int[] choices) {
this.choices = choices;
}
public int[] getOperands() {
return operands;
}
public void setOperands(int[] operands) {
this.operands = operands;
}
public int getUserAnswerIndex() {
return userAnswerIndex;
}
public void setUserAnswerIndex(int userAnswerIndex) {
this.userAnswerIndex = userAnswerIndex;
}
public int getAnswer() {
int answer = 0;
for (int operand : operands) {
answer += operand;
}
return answer;
}
public boolean isCorrect() {
return getAnswer() == choices[this.userAnswerIndex];
}
public boolean hasAnswered() {
return userAnswerIndex != -1;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
// Question
builder.append("Question: ");
for(int operand : operands) {
builder.append(String.format("%d ", operand));
}
builder.append(System.getProperty("line.separator"));
// Choices
int answer = getAnswer();
for (int choice : choices) {
if (choice == answer) {
builder.append(String.format("%d (A) ", choice));
} else {
builder.append(String.format("%d ", choice));
}
}
return builder.toString();
}
}
うまくいきます
public class Question implements Serializable {
private int[] operands;
private int[] choices;
private int userAnswerIndex;
public Question(int[] operands, int[] choices) {
this.operands = operands;
this.choices = choices;
this.userAnswerIndex = -1;
}
public int[] getChoices() {
return choices;
}
public void setChoices(int[] choices) {
this.choices = choices;
}
public int[] getOperands() {
return operands;
}
public void setOperands(int[] operands) {
this.operands = operands;
}
public int getUserAnswerIndex() {
return userAnswerIndex;
}
public void setUserAnswerIndex(int userAnswerIndex) {
this.userAnswerIndex = userAnswerIndex;
}
public int getAnswer() {
int answer = 0;
for (int operand : operands) {
answer += operand;
}
return answer;
}
public boolean isCorrect() {
return getAnswer() == choices[this.userAnswerIndex];
}
public boolean hasAnswered() {
return userAnswerIndex != -1;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
// Question
builder.append("Question: ");
for(int operand : operands) {
builder.append(String.format("%d ", operand));
}
builder.append(System.getProperty("line.separator"));
// Choices
int answer = getAnswer();
for (int choice : choices) {
if (choice == answer) {
builder.append(String.format("%d (A) ", choice));
} else {
builder.append(String.format("%d ", choice));
}
}
return builder.toString();
}
}
Source Activityで、これを使用します:
List<Question> mQuestionList = new ArrayList<Question>;
mQuestionsList = QuestionBank.getQuestions();
mQuestionList.add(new Question(ops1, choices1));
Intent intent = new Intent(SourceActivity.this, TargetActivity.class);
intent.putExtra("QuestionListExtra", ArrayList<Question>mQuestionList);
ターゲットアクティビティで、これを使用します。
List<Question> questions = new ArrayList<Question>();
questions = (ArrayList<Question>)getIntent().getSerializableExtra("QuestionListExtra");
Between Activity:私のために働いた
ArrayList<Object> object = new ArrayList<Object>();
Intent intent = new Intent(Current.class, Transfer.class);
Bundle args = new Bundle();
args.putSerializable("ARRAYLIST",(Serializable)object);
intent.putExtra("BUNDLE",args);
startActivity(intent);
Transfer.class
Intent intent = getIntent();
Bundle args = intent.getBundleExtra("BUNDLE");
ArrayList<Object> object = (ArrayList<Object>) args.getSerializable("ARRAYLIST");
この助けが誰かの助けになることを願っています。
Parcelableを使用してアクティビティ間でデータを受け渡す
これは通常、DataModelを作成したときに機能します
例えばタイプのjsonがあるとします
{
"bird": [{
"id": 1,
"name": "Chicken"
}, {
"id": 2,
"name": "Eagle"
}]
}
ここで、birdはListであり、2つの要素が含まれています。
jsonschema2pojo を使用してモデルを作成します
これで、モデルクラスName BirdModelとBird BirdModelが鳥のリストで構成され、鳥には名前とIDが含まれます
鳥のクラスに移動し、インターフェイス「implements Parcelable」を追加します
implemetsメソッドをAndroid studio by Alt + Enterで追加
注:実装方法の追加を示すダイアログボックスが表示されますEnterキーを押します
Alt + Enterを押してParcelable実装を追加します
注:[パーセル可能な実装を追加してもう一度入力してください]というダイアログボックスが表示されます。
それをインテントに渡します。
List<Bird> birds = birdModel.getBird();
Intent intent = new Intent(Current.this, Transfer.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("Birds", birds);
intent.putExtras(bundle);
startActivity(intent);
転送アクティビティonCreate
List<Bird> challenge = this.getIntent().getExtras().getParcelableArrayList("Birds");
ありがとう
問題がある場合はお知らせください。
手順:
オブジェクトクラスをserializableに実装します
public class Question implements Serializable`
これをSource Activityに入れます
ArrayList<Question> mQuestionList = new ArrayList<Question>;
mQuestionsList = QuestionBank.getQuestions();
mQuestionList.add(new Question(ops1, choices1));
Intent intent = new Intent(SourceActivity.this, TargetActivity.class);
intent.putExtra("QuestionListExtra", mQuestionList);
これをTarget Activityに入れてください
ArrayList<Question> questions = new ArrayList<Question>();
questions = (ArrayList<Questions>) getIntent().getSerializableExtra("QuestionListExtra");
Parcelableを介してオブジェクトを渡します。そして、ここに 良いチュートリアル があります。
最初の質問では、次のようにParcelableを実装し、それらの行を追加する必要があります。
public class Question implements Parcelable{
public Question(Parcel in) {
// put your data using = in.readString();
this.operands = in.readString();;
this.choices = in.readString();;
this.userAnswerIndex = in.readString();;
}
public Question() {
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(operands);
dest.writeString(choices);
dest.writeString(userAnswerIndex);
}
public static final Parcelable.Creator<Question> CREATOR = new Parcelable.Creator<Question>() {
@Override
public Question[] newArray(int size) {
return new Question[size];
}
@Override
public Question createFromParcel(Parcel source) {
return new Question(source);
}
};
}
次に、次のようにデータを渡します。
Question question = new Question();
// put your data
Intent resultIntent = new Intent(this, ResultActivity.class);
resultIntent.putExtra("QuestionsExtra", question);
startActivity(resultIntent);
そして、次のようなデータを取得します。
Question question = new Question();
Bundle extras = getIntent().getExtras();
if(extras != null){
question = extras.getParcelable("QuestionsExtra");
}
これでできます!
Beanまたはpojoクラスはimplements parcelable interface
である必要があります。
例えば:
public class BeanClass implements Parcelable{
String name;
int age;
String sex;
public BeanClass(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public static final Creator<BeanClass> CREATOR = new Creator<BeanClass>() {
@Override
public BeanClass createFromParcel(Parcel in) {
return new BeanClass(in);
}
@Override
public BeanClass[] newArray(int size) {
return new BeanClass[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
dest.writeString(sex);
}
}
Activity1
からActivity2
にarraylist
タイプのbeanclass
を送信するシナリオを考えてみましょう。
次のコードを使用します
アクティビティ1:
ArrayList<BeanClass> list=new ArrayList<BeanClass>();
private ArrayList<BeanClass> getList() {
for(int i=0;i<5;i++) {
list.add(new BeanClass("xyz", 25, "M"));
}
return list;
}
private void gotoNextActivity() {
Intent intent=new Intent(this,Activity2.class);
/* Bundle args = new Bundle();
args.putSerializable("ARRAYLIST",(Serializable)list);
intent.putExtra("BUNDLE",args);*/
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("StudentDetails", list);
intent.putExtras(bundle);
startActivity(intent);
}
アクティビティ2:
ArrayList<BeanClass> listFromActivity1=new ArrayList<>();
listFromActivity1=this.getIntent().getExtras().getParcelableArrayList("StudentDetails");
if (listFromActivity1 != null) {
Log.d("listis",""+listFromActivity1.toString());
}
この基本を理解することがコンセプトだと思います。
このシナリオでは2つのことのいずれかを行います
オブジェクトのシリアル化/逆シリアル化システムを実装し、文字列として渡します(通常はJSON形式ですが、好きな方法でシリアル化できます)
すべてのアクティビティがこのコンテナに対して読み書きできるように、アクティビティの外側にあるコンテナを実装します。このコンテナを静的にするか、ある種の依存性注入を使用して、各アクティビティで同じインスタンスを取得できます。
Parcelableは問題なく動作しますが、いつも見苦しいパターンであることがわかり、モデルの外部で独自のシリアル化コードを記述しても、実際には存在しない値は追加されません。
クラスQuestionにprimitives、SerializebleまたはString実装可能なフィールド Serializable 。 ArrayListは実装されていますSerializable。そのため、 Bundle.putSerializable(key、value) のように配置して別の場所に送信できます。 アクティビティ。私見、小包-それは非常に長い道のりです。
そのような単純な !!私のために働いた
活動から
Intent intent = new Intent(Viewhirings.this, Informaall.class);
intent.putStringArrayListExtra("list",nselectedfromadapter);
startActivity(intent);
アクティビティへ
Bundle bundle = getIntent().getExtras();
nselectedfromadapter= bundle.getStringArrayList("list");
あなたのarrayList:
ArrayList<String> yourArray = new ArrayList<>();
目的の場所から次のコードを記述します。
Intent newIntent = new Intent(this, NextActivity.class);
newIntent.putExtra("name",yourArray);
startActivity(newIntent);
次のアクティビティ:
ArrayList<String> myArray = new ArrayList<>();
OnCreateでこのコードを記述します。
myArray =(ArrayList<String>)getIntent().getSerializableExtra("name");
インテント付きバンドルを使用して、あるアクティビティから別のアクティビティにarraylistを渡すことができます。以下のコードを使用してくださいこれはarraylistを渡すための最短で最適な方法です
bundle.putStringArrayList( "keyword"、arraylist);
Question
がParcelable
を実装している場合、意図の作成は正しいようです。
次のアクティビティでは、次のような質問のリストを取得できます。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getIntent() != null && getIntent().hasExtra("QuestionsExtra")) {
List<Question> mQuestionsList = getIntent().getParcelableArrayListExtra("QuestionsExtra");
}
}
Parcelableインターフェイスも実装する必要があり、Serializableに加えてConstructorでParcel引数を使用して、questionsクラスにwriteToParcelメソッドを追加する必要があります。そうしないと、アプリがクラッシュします。
Serializableよりも効率的なオブジェクトの受け渡しにparcelableを使用できます。
私が共有しているリンクには、完全なパーセル可能なサンプルが含まれています。 ParcelableSample.Zipのダウンロードをクリック
Kotlinでデータを設定するには
val offerIds = ArrayList<Offer>()
offerIds.add(Offer(1))
retrunIntent.putExtra(C.OFFER_IDS, offerIds)
データを取得するには
val offerIds = data.getSerializableExtra(C.OFFER_IDS) as ArrayList<Offer>?
今すぐarraylistにアクセスしてください
//arraylist/Pojo you can Pass using bundle like this
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle args = new Bundle();
args.putSerializable("imageSliders",(Serializable)allStoriesPojo.getImageSliderPojos());
intent.putExtra("BUNDLE",args);
startActivity(intent);
Get SecondActivity like this
Intent intent = getIntent();
Bundle args = intent.getBundleExtra("BUNDLE");
String filter = bundle.getString("imageSliders");
//Happy coding
Parcelableを実装し、arraylistをputParcelableArrayListExtraそして次のアクティビティから取得getParcelableArrayListExtra
例:
実装可能な区画カスタムクラスでAlt + enter)そのメソッドを実装する
public class Model implements Parcelable {
private String Id;
public Model() {
}
protected Model(Parcel in) {
Id= in.readString();
}
public static final Creator<Model> CREATOR = new Creator<Model>() {
@Override
public ModelcreateFromParcel(Parcel in) {
return new Model(in);
}
@Override
public Model[] newArray(int size) {
return new Model[size];
}
};
public String getId() {
return Id;
}
public void setId(String Id) {
this.Id = Id;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(Id);
}
}
---(アクティビティ1からクラスオブジェクトを渡す
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putParcelableArrayListExtra("model", modelArrayList);
startActivity(intent);
Activity2から追加
if (getIntent().hasExtra("model")) {
Intent intent = getIntent();
cartArrayList = intent.getParcelableArrayListExtra("model");
}