2016-04-12 14 views
0

Farklı bir sınıfta göstermek için bir uyarı iletişim kutusunda seçilen belirli öğeleri almayı ve fiyat olarak eklenecek değerleri almayı deniyorum. Seçilmiş olanı göstermesini istiyorum. Döngü için yanlış olduğunu biliyorum; Oraya ne gitmeli ki diziyi hashsetin pozisyon değerine sahibim. Ne olduklarını tanımlamak için 2 diziler ve HashSet kullanıyorumBelirli bir int hashset'i edinin

final String[] OptionsStringARR = {"Babysit", "Snorkelling", "Test1", "Test2"}; 
final int[] OptionsPricingARR = {10, 35, 14, 9}; 
final ArrayList OptionssSelected = new ArrayList(); 
final HashSet<Integer> optset = new HashSet<>(); 
boolean[] checked= {false,false,false,false}; 
public class OptionClass implements View.OnClickListener { 
    @Override 
    public void onClick(View v) { 
     new AlertDialog.Builder(ibMap.this) 
       .setTitle(guidedetail.getText() + " available options.") 
       .setMultiChoiceItems(OptionsStringARR, checked, 
         new DialogInterface.OnMultiChoiceClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, int selectedItemId, 
               boolean isSelected) { 
           if (isSelected) { 
            checked[selectedItemId]=true; 
            optset.add(selectedItemId); 

           } else if (optset.contains(selectedItemId)) { 
            checked[selectedItemId]=false; 
            optset.remove(Integer.valueOf(selectedItemId)); 

           } 
          } 

         }) 
         //.setMessage("//I need to put shit here. Array lists maybe. and check boxes") 
       .setCancelable(true) 
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.cancel(); 

          } 
         } 

       ) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 

           //optset.addAll(OptionssSelected); 
           dialog.dismiss(); 
          } 
         } 

       ).create().show(); 
    } 

} 

, HashSet sonra bilgi içeren diziler ne seçilmiş olduğunu belirlemek ve.

public class ConfirmClass implements View.OnClickListener { 


    @Override 
    public void onClick(View v) { 
     int TotalOpt=0; 
     for (int j = 0; j < optset.size(); j++){ 
      int[] y = new int[optset.size()]; 

      int x = y[j]; 
      TotalOpt=TotalOpt+ OptionsPricingARR[x]; 
     } 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < optset.size(); i++) { 
      if (i > 0) { 
       sb.append(", "); 
      } 
      sb.append(OptionsStringARR[i]); 
     } 
     new AlertDialog.Builder(ibMap.this) 
       .setTitle(guidedetail.getText()) 
       .setMessage("Options Selected: " + sb + 
         "\nTotal: "+ TotalOpt) 
       .setCancelable(true) 
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.cancel(); 

          } 
         } 

       ) 
       .setPositiveButton("Confirm", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           startActivity(new Intent(ibMap.this, confirm.class)); 
          } 
         } 

       ).create().show(); 
    } 

} 

Teşekkürler! Ayrıca uyarılar aracılığıyla uyarıların fiyatını göstermeye yardımcı olsaydınız harika olurdu! biri aşağıda gösterildiği gibi

+0

Hoşgeldin taşması Stack için .. ben static başlatıcı bloğu kullandık yüzden, uygulamanızda seçenekleri sabit olduğunu varsaydım. Bir çok * kod yazdınız, ancak çok azının "hashset'te belirli bir int alma" ile ilgisi var gibi görünüyor ve açıklamanız net değil. Lütfen kodunuzu ideal olarak [mcve] olarak elde etmeye çalıştığınız şeyin en küçük bir örneğine indirin. Sorununuz Android'e özgü veya bir kullanıcı arayüzü öğesine özgü olmadıkça, yalnızca kopyala/yapıştır/derle/çalıştırdığımız bir konsol uygulamasında göstermeye çalışırdım. –

cevap

0

Neden Option için ayrı bir sınıf oluşturmak yoktur:

class Option { 
    private Integer itemId; 
    private String stringARR; 
    private Integer pricingARR; 

    public Option(Integer itemId, String stringARR, Integer pricingARR) { 
    // constructor code 
    } 

    // setter and getters 
} 

Kullanım önceden doldurulmuş gibi yerine seçenek dize ve fiyatlandırma için 2 diziler kullanmanın Map<Integer, Option>:

sınıfın ConfirmClass yönteminiz onClick yılında Sonra

final static Map<Integer, Option> optionMap = new HashMap<>(); 
final Set<Integer> optset = new HashSet<>(); 

// pre initialize options in map for later use 
static{ 
    optionMap.put(1, new Option(1, "Babysit", 10));  // assuming 1 is option id for "Babysit" 
    optionMap.put(2, new Option(2, "Snorkelling", 35)); // assuming 2 is option id for "Snorkelling" 
    // populate other options 
} 
, fiyatlandırma ve karakter dizisi birleştirme için kod aşağıda kullanın:

@Override 
    public void onClick(View v) { 
     int totalOpt=0; 
     StringBuilder sb = new StringBuilder(); 

     for (Iterator<Integer> iterator = optset.iterator(); iterator.hasNext();){ 
      // add option price 
      totalOpt += optionMap.get(iterator.next()).getPricingARR(); 

      // append option description 
      if (sb.length() > 0) { 
       sb.append(", "); 
      } 
      sb.append(optionMap.get(iterator.next()).getStringARR()); 
     } 

     // rest of the code 
    } 

Not: koduna baktığımızda, ben