Ich habe den folgenden Code in meiner onClick()
-Methode als
List<Question> mQuestionsList = QuestionBank.getQuestions();
Nun habe ich die Absicht nach dieser Zeile wie folgt:
Intent resultIntent = new Intent(this, ResultActivity.class);
resultIntent.putParcelableArrayListExtra("QuestionsExtra", (ArrayList<? extends Parcelable>) mQuestionsList);
startActivity(resultIntent);
Ich weiß nicht, wie ich diese Fragenlisten in der Absicht von einer Aktivität an eine andere Aktivität übergeben kannMeine Fragenklasse
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();
}
}
Es läuft gut,
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();
}
}
Verwenden Sie in Ihrer Quellenaktivität Folgendes:
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);
Verwenden Sie in Ihrer Zielaktivität Folgendes:
List<Question> questions = new ArrayList<Question>();
questions = (ArrayList<Question>)getIntent().getSerializableExtra("QuestionListExtra");
Zwischen Aktivität: Für mich gearbeitet
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);
In der Transfer.class
Intent intent = getIntent();
Bundle args = intent.getBundleExtra("BUNDLE");
ArrayList<Object> object = (ArrayList<Object>) args.getSerializable("ARRAYLIST");
Hoffe, diese Hilfe ist jemand.
Verwenden von Parcelable zum Übertragen von Daten zwischen Aktivität
Dies funktioniert normalerweise, wenn Sie DataModel erstellt haben
z.B. Angenommen, wir haben einen Json-Typ
{
"bird": [{
"id": 1,
"name": "Chicken"
}, {
"id": 2,
"name": "Eagle"
}]
}
Hier ist Vogel eine Liste und er enthält zwei Elemente
wir erstellen die Modelle mit jsonschema2pojo
Jetzt haben wir die Modellklasse Name BirdModel und Bird BirdModel bestehen aus List of Bird Und Bird enthält Name und ID
Gehen Sie zur Vogelklasse und fügen Sie die Schnittstelle "implements Parcelable" hinzu.
fügen Sie die Implemets-Methode in Android Studio von Alt + Enter hinzu
Hinweis: Ein Dialogfeld wird angezeigt, in dem Sie die Methode zum Implementieren von Methoden drücken und die Eingabetaste drücken
Fügen Sie Parcelable-Implementierung hinzu, indem Sie die Tastenkombination Alt + Eingabetaste drücken
Hinweis: Es erscheint ein Dialogfeld mit der Meldung Parcelable-Implementierung hinzufügen und erneut eingeben
Nun, um es der Absicht zu übergeben.
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);
Und bei Übertragungsaktivität onCreate
List<Bird> challenge = this.getIntent().getExtras().getParcelableArrayList("Birds");
Vielen Dank
Wenn es ein Problem gibt, lass es mich wissen.
Schritte:
Implementiert Ihre Objektklasse in serialisierbar
public class Question implements Serializable`
Fügen Sie dies in Ihre Source-Aktivität .__ ein.
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);
Setzen Sie dies in Ihre Target Activity
ArrayList<Question> questions = new ArrayList<Question>();
questions = (ArrayList<Questions>) getIntent().getSerializableExtra("QuestionListExtra");
Übergeben Sie Ihr Objekt über Parcelable . Und hier ist ein gutes Tutorial , um den Einstieg zu erleichtern.
Erste Frage sollte Parcelable so implementieren und die folgenden Zeilen hinzufügen:
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);
}
};
}
Dann geben Sie Ihre Daten so weiter:
Question question = new Question();
// put your data
Intent resultIntent = new Intent(this, ResultActivity.class);
resultIntent.putExtra("QuestionsExtra", question);
startActivity(resultIntent);
Und bekomme deine Daten so:
Question question = new Question();
Bundle extras = getIntent().getExtras();
if(extras != null){
question = extras.getParcelable("QuestionsExtra");
}
Das wird es tun!
Ihre Bean- oder Pojo-Klasse sollte implements parcelable interface
sein.
Zum Beispiel:
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);
}
}
Stellen Sie sich ein Szenario vor, dass Sie die Variable arraylist
vom Typ beanclass
von Activity1
an Activity2
senden möchten.
Verwenden Sie den folgenden Code
Aktivität 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);
}
Aktivität2:
ArrayList<BeanClass> listFromActivity1=new ArrayList<>();
listFromActivity1=this.getIntent().getExtras().getParcelableArrayList("StudentDetails");
if (listFromActivity1 != null) {
Log.d("listis",""+listFromActivity1.toString());
}
Ich denke, das ist grundlegend, um das Konzept zu verstehen.
In diesem Szenario mache ich zwei Dinge
Implementieren Sie ein Serialisierungs-/Deserialisierungssystem für meine Objekte und übergeben Sie sie als Strings (normalerweise im JSON-Format, aber Sie können sie nach Belieben serialisieren).
Implementieren Sie einen Container, der sich außerhalb der Aktivitäten befindet, damit alle meine Aktivitäten diesen Container lesen und beschreiben können. Sie können diesen Container als statisch festlegen oder eine Abhängigkeitspritze verwenden, um in jeder Aktivität dieselbe Instanz abzurufen.
Parcelable funktioniert prima, aber ich fand es immer hässlich und fügt nicht wirklich einen Wert hinzu, der nicht vorhanden ist, wenn Sie Ihren eigenen Serialisierungscode außerhalb des Modells schreiben.
Wenn Ihre Klasse Question nur Primitive, Serializeble oder String Felder enthält, können Sie ihn Serializable implementieren. ArrayList ist implementiert Serializable, deshalb können Sie es wie Bundle.putSerializable (Schlüssel, Wert) setzen und es an eine andere Activity . IMHO, Parcelable senden - es ist sehr weit .
Ihre arrayList:
ArrayList<String> yourArray = new ArrayList<>();
Schreiben Sie diesen Code an dem Ort, an dem Sie beabsichtigen möchten:
Intent newIntent = new Intent(this, NextActivity.class);
newIntent.putExtra("name",yourArray);
startActivity(newIntent);
In der nächsten Aktivität:
ArrayList<String> myArray = new ArrayList<>();
Schreiben Sie diesen Code in onCreate:
myArray =(ArrayList<String>)getIntent().getSerializableExtra("name");
Sie können die Arrayliste von einer Aktivität an eine andere übergeben, indem Sie ein Bündel mit Intent .. verwenden. Verwenden Sie den folgenden Code .__ Dies ist der kürzeste und am besten geeignete Weg, um die Arrayliste zu übergeben
bundle.putStringArrayList ("Schlüsselwort", Arrayliste);
Ihre Absichtserstellung scheint korrekt zu sein, wenn Ihre Question
Parcelable
implementiert.
In der nächsten Übung können Sie Ihre Fragenliste wie folgt abrufen:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getIntent() != null && getIntent().hasExtra("QuestionsExtra")) {
List<Question> mQuestionsList = getIntent().getParcelableArrayListExtra("QuestionsExtra");
}
}
Sie müssen auch die Parcelable-Schnittstelle implementieren und zusätzlich zur Serializable-Klasse in Constructor der Klasse Questions mit Parcel die Methode writeToParcel hinzufügen. Andernfalls stürzt die App ab.
Sie können parcelable für die Objektübergabe verwenden, was effizienter ist als Serializable.
Bitte verweisen Sie auf den Link, den ich teile, enthält vollständige paketversandfähige Probe. Klicken Sie auf ParcelableSample.Zip herunterladen
Um die Daten in kotlin zu setzen
val offerIds = ArrayList<Offer>()
offerIds.add(Offer(1))
retrunIntent.putExtra(C.OFFER_IDS, offerIds)
Um die Daten zu erhalten
val offerIds = data.getSerializableExtra(C.OFFER_IDS) as ArrayList<Offer>?
Greifen Sie jetzt auf die Arrayliste zu
So einfach ist das !! arbeitete für mich
Von der Tätigkeit
Intent intent = new Intent(Viewhirings.this, Informaall.class);
intent.putStringArrayListExtra("list",nselectedfromadapter);
startActivity(intent);
TO Aktivität
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
Implementiert Parcelable und sendet Arraylist als putParcelableArrayListExtra und hol es dir bei der nächsten Aktivität getParcelableArrayListExtra
beispiel:
Implementiere parcelable in deiner benutzerdefinierten Klasse Alt + Enter) Implementiere die Methoden
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);
}
}
--- (Klassenobjekt aus Aktivität 1 übergeben
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putParcelableArrayListExtra("model", modelArrayList);
startActivity(intent);
Extra von Activity2 erhalten
if (getIntent().hasExtra("model")) {
Intent intent = getIntent();
cartArrayList = intent.getParcelableArrayListExtra("model");
}