J'ai le code suivant dans ma méthode onClick()
en tant que
List<Question> mQuestionsList = QuestionBank.getQuestions();
Maintenant, j'ai l'intention après cette ligne, comme suit:
Intent resultIntent = new Intent(this, ResultActivity.class);
resultIntent.putParcelableArrayListExtra("QuestionsExtra", (ArrayList<? extends Parcelable>) mQuestionsList);
startActivity(resultIntent);
Je ne sais pas comment passer cette liste de questions dans l’intention d’une activité à une autre activité.
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();
}
}
Ça marche bien,
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();
}
}
Dans votre activité source, utilisez ceci:
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);
Dans votre activité cible, utilisez ceci:
List<Question> questions = new ArrayList<Question>();
questions = (ArrayList<Question>)getIntent().getSerializableExtra("QuestionListExtra");
Entre activité: a travaillé pour moi
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);
Dans la classe de transfert
Intent intent = getIntent();
Bundle args = intent.getBundleExtra("BUNDLE");
ArrayList<Object> object = (ArrayList<Object>) args.getSerializable("ARRAYLIST");
J'espère que cette aide est quelqu'un.
Utilisation de Parcelable pour transmettre des données entre Activity
Cela fonctionne généralement lorsque vous avez créé DataModel.
par exemple. Supposons que nous ayons un JSON de type
{
"bird": [{
"id": 1,
"name": "Chicken"
}, {
"id": 2,
"name": "Eagle"
}]
}
Ici, l’oiseau est une liste et il contient deux éléments
nous allons créer les modèles avec jsonschema2pojo
Nous avons maintenant la classe de modèle Name BirdModel et Bird BirdModel se compose de List of Bird Et Bird contient name et id.
Allez dans la classe bird et ajoutez l'interface "implements Parcelable"
ajout de la méthode implemets dans le studio Android par Alt + Entrée
Remarque: une boîte de dialogue apparaît pour indiquer que la méthode Ajouter est implémentée.
Ajouter l'implémentation Parcelable en appuyant sur les touches Alt + Entrée
Remarque: une boîte de dialogue indiquant Ajouter une implémentation parcelable.
Passons maintenant à l'intention.
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);
Et sur l'activité de transfert onCreate
List<Bird> challenge = this.getIntent().getExtras().getParcelableArrayList("Birds");
Merci
S'il y a un problème s'il vous plaît faites le moi savoir.
Pas:
Implémente votre classe d'objet sur serializable
public class Question implements Serializable`
Mettez ceci dans votre Activité source
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);
Mettez ceci dans votre Activité cible
ArrayList<Question> questions = new ArrayList<Question>();
questions = (ArrayList<Questions>) getIntent().getSerializableExtra("QuestionListExtra");
Passez votre objet via Parcelable . Et voici un bon tutoriel pour vous aider à démarrer.
La première question devrait implémenter Parcelable comme ceci et ajouter les lignes suivantes:
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);
}
};
}
Puis transmettez vos données comme ceci:
Question question = new Question();
// put your data
Intent resultIntent = new Intent(this, ResultActivity.class);
resultIntent.putExtra("QuestionsExtra", question);
startActivity(resultIntent);
Et obtenez vos données comme ceci:
Question question = new Question();
Bundle extras = getIntent().getExtras();
if(extras != null){
question = extras.getParcelable("QuestionsExtra");
}
Cela fera l'affaire!
Votre classe de haricot ou de pojo devrait implements parcelable interface
.
Par exemple:
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);
}
}
Envisagez un scénario dans lequel vous souhaitez envoyer le type arraylist
of beanclass
de Activity1
à Activity2
.
Utilisez le code suivant
Activité 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);
}
Activité2:
ArrayList<BeanClass> listFromActivity1=new ArrayList<>();
listFromActivity1=this.getIntent().getExtras().getParcelableArrayList("StudentDetails");
if (listFromActivity1 != null) {
Log.d("listis",""+listFromActivity1.toString());
}
Je pense que cette base pour comprendre le concept.
Je fais l'une des deux choses dans ce scénario
Implémentez un système de sérialisation/désérialisation de mes objets et transmettez-les sous forme de chaînes (au format JSON généralement, mais vous pouvez les sérialiser à votre guise)
Implémentez un conteneur qui réside en dehors des activités afin que toutes mes activités puissent lire et écrire dans ce conteneur. Vous pouvez rendre ce conteneur statique ou utiliser un type d'injection de dépendance pour récupérer la même instance dans chaque activité.
Parcelable fonctionne très bien, mais j’ai toujours trouvé que c’était un motif moche qui n’ajoute aucune valeur qui n’existe pas si vous écrivez votre propre code de sérialisation en dehors du modèle.
Votre tableau de listes:
ArrayList<String> yourArray = new ArrayList<>();
Écrivez ce code d'où vous voulez l'intention:
Intent newIntent = new Intent(this, NextActivity.class);
newIntent.putExtra("name",yourArray);
startActivity(newIntent);
Dans l'activité suivante:
ArrayList<String> myArray = new ArrayList<>();
Écrivez ce code dans onCreate:
myArray =(ArrayList<String>)getIntent().getSerializableExtra("name");
Vous pouvez passer l'arraylist d'une activité à une autre en utilisant bundle avec intent . Utilisez le code ci-dessous C'est le moyen le plus court et le plus approprié de passer arraylist
bundle.putStringArrayList ("mot clé", liste récapitulative);
Votre création d’intention semble correcte si votre Question
implémente Parcelable
.
Dans l'activité suivante, vous pouvez récupérer votre liste de questions comme celle-ci:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getIntent() != null && getIntent().hasExtra("QuestionsExtra")) {
List<Question> mQuestionsList = getIntent().getParcelableArrayListExtra("QuestionsExtra");
}
}
Vous devez également implémenter l'interface Parcelable et ajouter la méthode writeToParcel à votre classe Questions avec l'argument Parcel dans le constructeur en plus de Serializable. sinon l'application va planter.
Vous pouvez utiliser le paramètre parcellaire pour le passage d’objet, ce qui est plus efficace que Serializable.
Veuillez vous référer au lien que je suis partage contient complet échantillon parcelable . Cliquez sur télécharger ParcelableSample.Zip
Pour définir les données dans kotlin
val offerIds = ArrayList<Offer>()
offerIds.add(Offer(1))
retrunIntent.putExtra(C.OFFER_IDS, offerIds)
Pour obtenir les données
val offerIds = data.getSerializableExtra(C.OFFER_IDS) as ArrayList<Offer>?
Accédez maintenant à l'aryliste
Aussi simple que cela !! a travaillé pour moi
De l'activité
Intent intent = new Intent(Viewhirings.this, Informaall.class);
intent.putStringArrayListExtra("list",nselectedfromadapter);
startActivity(intent);
À l'activité
Bundle bundle = getIntent().getExtras();
nselectedfromadapter= bundle.getStringArrayList("list");
//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