Postingan lainnya
Passing array dari class a ke class b
Saya punya activity form kuis (class A) yang berisi pertanyaan dan setiap pertanyaannya mengandung 2 jawab yes dan no dan setiap jawaban mengembalikan nilai yang disimpan di array. Lalu di akhir kuis tersebut array nya ingin saya passing ke class B untuk di proses dan menghasilkan nilai. Setiap kembali ke menu utama dan mengulang kuis, array akan diclear terlebih dahulu baru menyimpan elemen baru sesuai jawaban yang baru. Bagaimana cara passing array dari class A ke class B agar saat melakukan pengulangan kuis, array di class B terupdate sesuai dengan yang ada di class A?
Ini codingan class A dan B nya, saat saya debug ternyata array yang terpassing ke class B tidak terupdate/masih menyimpan array lama.
Class A
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screening);
toolbar_scr = findViewById(R.id.toolbarScreening);
toolbar_scr.setTitle("Screening");
arrayDS.clear();
arrayFT.clear();
countQuestion = findViewById(R.id.qNumber);
textQuestion = findViewById(R.id.qText);
optYes = findViewById(R.id.btnYes);
optNo = findViewById(R.id.btnNo);
optYes.setOnClickListener(this);
optNo.setOnClickListener(this);
firestore = FirebaseFirestore.getInstance();
getQuestionList();
}
private void getQuestionList() {
questionList = new ArrayList<>();
firestore.collection("PTSDProject").document("Screening")
.collection("Question").get().addOnCompleteListener(new
OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()){
QuerySnapshot questions = task.getResult();
for (QueryDocumentSnapshot doc: questions){
questionList.add(new Question(doc.getString("textQuestion"),
doc.getString("optYes"),
doc.getString("optNo"),
doc.getString("group"),
Double.valueOf(doc.getString("valueYes"))
));
}
setQuestion();
} else {
Toast.makeText(ScreeningActivity.this,
task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
private void setQuestion() {
numQuestion = 0;
textQuestion.setText(questionList.get(numQuestion).getTextQuestion());
optYes.setText(questionList.get(numQuestion).getOptYes());
optNo.setText(questionList.get(numQuestion).getOptNo());
countQuestion.setText(String.valueOf(1) + "/" +
String.valueOf(questionList.size()));
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnYes:
arrayDS.add(questionList.get(numQuestion).getValueYes());
arrayFT.add(questionList.get(numQuestion).getValueYes());
break;
case R.id.btnNo:
arrayFT.add(0.0);
break;
default:
}
changeQuestion();
Log.d("ArrayDS", String.valueOf(arrayDS));
Log.d("ArrayFT", String.valueOf(arrayFT));
}
private void changeQuestion() {
if (numQuestion < questionList.size() - 1){
numQuestion++;
textQuestion.setText(questionList.get(numQuestion).getTextQuestion());
optYes.setText(questionList.get(numQuestion).getOptYes());
optNo.setText(questionList.get(numQuestion).getOptNo());
countQuestion.setText(String.valueOf(numQuestion + 1) + "/" +
String.valueOf(questionList.size()));
} else {
Intent intentMove = new Intent(this, ResultActivity.class);
startActivity(intentMove);
finish();
}
}
public static ArrayList<Double> returnDataDS(){
return (arrayDS);
}
public static ArrayList<Double> returnDataFT(){
return (arrayFT);
}
Class B private static ArrayList<Double> arrayDS = classA.returnDataDS();
private static double inferensiDS(double x, double y){ return (x * y) + (x * (1 - y) + ((1 - x) * y)); }
public static double screeningDS(){ Log.d("getDS", String.valueOf(arrayDS)); double hasilDS; if (arrayDS.size() <= 1){ hasilDS = 0; return hasilDS; } else { double temp = 0; temp = inferensiDS(arrayDS.get(0), arrayDS.get(1)); for (int i = 2; i < arrayDS.size(); i++){ temp = inferensiDS(temp, arrayDS.get(i)); }
hasilDS = temp * 100; return hasilDS; }
}
2 Jawaban:
masukkan data dalam intent saat mulai ResultActivity.
<pre>
Intent intentMove = new Intent(this, ResultActivity.class);
intentMovee.putExtra("dataDS", returnDataDS());
startActivity(intentMove);
finish();
</pre>
class B dalam method onCreated() baca data dalam intent:
<pre> arrayDS = getIntent().getDoubleArrayExtra("dataDS"); </pre>
Tanggapan
Sebelumnya terima kasih Mas sudah meluangkan waktu buat jawab.. Kalau kasusnya intent move itu buat pindah ke class C gimana ya Mas? Jadi yang punya UI itu cuma class A dan C, class B cuma dipake buat numpang ngitung. Dari class A UInya move ke kelas C, tapi proses passing datanya dari class A passing array ke class B buat dihitung lalu hasil hitungannya baru dipassing ke class C. Itu gimana ya Mas? Saya bingung banget searching nya gimana hehe
rekomendasinya sekarang pakai Android Jetpack Komponen Arsitektur. gunakan ViewModel, baca-baca <a href='https://developer.android.com/topic/libraries/architecture/viewmodel'>disini</a>
Tanggapan
Oke!! tengkyu Mas rekomendasinya, saya baca sumbernya