2016-04-14 54 views
0

Doğru, bu yüzden benim problemim "Select Grade, Pass, Merit, Distinction" için aynı dizi dizisini kullanan 18 iplikçiye (birim) sahip olduğumu ve "Pass, Merit, Distinction", sırasıyla 70, 80, 90'a eşit olacak şekilde 18 değeri toplayabilir ve bu değeri "yourResults" adlı bir metin görünümünde görüntüleyebilirim. Şu anda ilan etmek hashmap kullandık Geçiş = 70 vb yüzden böyle:Android Studio - Hissedilen dizge toplamını sumlamak için Hashmap kullanma

Button button = (Button) rootView.findViewById(R.id.savegrades); 
    final Map<String,Integer> gradeScoreMap = new HashMap<String,Integer>(); 
    gradeScoreMap.put("Pass",70); 
    gradeScoreMap.put("Merit",70); 
    gradeScoreMap.put("Distinction",70); 
    button.setOnClickListener(new View.OnClickListener() 
    { 
     public int getNumber(String text) 
     { 
      return gradeScoreMap.get(text); 
     } 

     @Override 
     public void onClick(View v) { 

      int score; 
      { 
       score = getNumber(Grade_Spinner1.toString()); 
       yourResult.setText(score); 
      } 

anda benim kod yalnızca bir test olarak ilk eğiren Grade_Spinner1 görür.

Tüm 18 birimin toplamını toplamak ve sonra bu sayıyı metin görünümünde görüntülemek için bir düğme istiyorum ancak şu anda ilk spinner değerini görüntülemek için metin görünümünü alamıyorum. Ayrıca bu kodun bir parçanın içinde olduğunu da belirtmeliyim.

Android stüdyo ve java için yeni olduğum gibi açıklamalarla birlikte herhangi bir rehberlik/yardım çok yardımcı olacak ve takdir edilecektir.

+0

Netleştirme: Düzeninizde 18 bireysel iplikçiniz olduğunu mu söylediniz? – Eenvincible

+0

Evet, her bir spinner bir okul/kolej kursu birimini (örneğin ünite 1 - e-ticaret) temsil eder. Farklı bir çevirici de, kullanıcının seçimine bağlı olarak bunu 12 veya 18 arasında değiştirir. Bu çevirici, önceki bir parça üzerinde ve bunun için kod sağlayabilir. –

cevap

0

Düğme tıklandığında, ilgi çekici iplikçiyi seçtikten sonra getNumber (metin) ile hashmap (gradeScoreMap) 'a karşılık gelen değeri almalı ve final skoru almak için tüm değerleri ekleyin.

Spinner spinner1 = (Spinner)findViewById(R.id.spinner1); 
    Spinner spinner2 = (Spinner)findViewById(R.id.spinner2); 
    Spinner spinner3 = (Spinner)findViewById(R.id.spinner3); 
    Spinner spinner4 = (Spinner)findViewById(R.id.spinner4); 
      . 
      . 
      . 



button.setOnClickListener(new View.OnClickListener() 
    { 

public int getNumber(String text) 
     { 
      return gradeScoreMap.get(text); 
     } 


     @Override 
     public void onClick(View v) { 

      int score=0; 
      { 
       String text1 = spinner1.getSelectedItem().toString(); 
       String text2 = spinner2.getSelectedItem().toString(); 
       String text3 = spinner3.getSelectedItem().toString(); 
       String text4 = spinner4.getSelectedItem().toString(); 

      score = getNumber(text1)+getNumber(text2)+getNumber(text3) 
        +getNumber(text4)+.....; 

       yourResult.setText(String.valueOf(score)); 
      } 

     } 
    } 
+0

Kaza nedir? Lütfen logcat'ınızı gönderin –

+0

Bunu anladım, Seçme için bir Hashmap hazırlamamışım –

+0

Belki de bu kodu değiştirebileceğimi açıklayabiliyor musunuz? . :) –

0

bu yaklaşımı deneyin: beklendiği gibi tüm iplikçiler görünür durumdaysa

  • ;
  • Öğe seçimini dinlemek için bir arabirim ekleyin: `OnItemSelectedListener
  • Artık 18'inizden her biri, her bir döndürücüde, bir şey seçildiğinde bir şeyler yapmanız gerekir.
  • istemi, geçiş, hak, olasılıkları var. Birisi her bir spikerde bir değer seçmezse, aslında bir hata mesajını durdurmak ve göstermek istersiniz.
  • Şimdi önemli olan şudur: switch(selectedItem) ve pass merit distinction değerlerini kontrol edin. Bu, 18 iplik makinenize son seçimlerinizi atamanıza izin verecektir. Yanıtlarınızı saklayacak 18 sınıf seviyesinde özel değişkenler bulundurun.
  • Örneğin sonraki görünüme geçmeden önce, sadece son verileri doğruladığınızdan emin olun !!

Umarım bu mantıklı ve size yardımcı olur! Bir öğe, belirli bir değer değişimi seçilir Özetle olarak

, sınıf düzeyi değişkeni (- 1 adet spinner için bunların 18) 'de, söz konusu madde için bir değeri. Sonunda, her değişken seçimden bir değer içerecektir. Ancak her bir spiker için 3 olası seçenek arasında geçiş yapmayı unutmayın!

İyi şanslar!

DÜZENLEME


bir geçiş 80 ve ayrım 90 temsil ettiği 70 ve liyakat gibi belirli bir değeri temsil eder, yukarıda belirttiğimiz;

Şimdi bunun hakkında düşünürseniz, puanın karşılık gelen değeri olarak 80 elde etmek demektir, bir kullanıcı liyakat seçecektir. Yani 80’e varmak için, kullanıcının hak ettiğini bilmelisiniz. Bunu Java'da nasıl biliyorsunuz? if statements veya switch statement'u kullanabilirsiniz. Gibi bu her eğiren sizin onItemSelectedListener içi:

switch(arrayOfStringValues[position]){ 
    case "pass": 
     someUnitXScore = 70; 
     break; 
    case "merit": 
     someUnitXScore = 80; 
     break; 
    case "distinction": 
     someUnitXScore = 90; 
     break; 
} 

`Ama her zaman sor ilk değerini yakalamak için unutmayın!

+0

Cevabınız için çok teşekkür ederim. Çoğunlukla mantıklı ama ne anlama geliyor (12 ile 18 ünite arasında geçiş yaptığımı varsayalım) ve neden özel değişkenler ve halka açık değil? –

+0

Cevabımı sizin için düzenleyerek açıklamama izin verin. – Eenvincible

+0

Değerleri bir araya getirmenin çok uzun bir yolunu buldum ama işe yarıyor. 1'den 18'e kadar bir puan toplamış ve her bir skor kodu skor = getnumber (text1) vb. Yine çok uzun ama 18 birim için çalışıyor. –