2016-04-12 4 views
0

私は、警告ダイアログボックスで選択した特定のアイテムを別のクラスに表示し、価格として追加するための対応する値を取得しようとしています。私はそれが何が選択されているかを示したい。私はforループが間違っていることを知っています。何がそこに行かなければならないので、私はハッシュセットの位置の値に配列を持っています。ハッシュセットの特定の整数を取得

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(); 
    } 

} 

Iは、次いで、2つの配列及びそれらが何であるかを定義するHashSetの、選択されたかを決定するためのHashSetの、情報を含むアレイを使用しています。

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(); 
    } 

} 

ありがとうございます!また、alertdialog経由でオプションの価格を表示するのを助けることができればそれは素晴らしいでしょう!

+0

ようこそスタックオーバーフロー..私はstatic初期化子ブロックを使用している理由です、あなたのアプリケーションのオプションが固定されていることを前提としています。 *たくさんのコードを投稿しましたが、 "ハッシュセットで特定のintを取得する"と何か関係があり、あなたの説明は不明です。理想的には[mcve]として、達成しようとしていることの最小限の例にコードを縮小してください。あなたの問題がAndroidやユーザーインターフェイスの要素に固有のものでない限り、私はコンソールアプリケーションでそれを実証しようとしますが、コピー/貼り付け/コンパイル/実行しかできません。 –

答えて

0

なぜあなたは以下のような、Option用に別のクラスを作成しないでください:

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

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

    // setter and getters 
} 

は次のように、代わりにオプション文字列や価格については、2つの配列を使用しての事前設定さMap<Integer, Option>を使用しますクラスConfirmClassのあなたの方法onClickで次に

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 
} 

、価格設定と文字列連結のためのコードの下に使用します。

@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 
    } 

注:あなたのコードを見てみるとは、私は

関連する問題