2016-09-07 4 views
2

私はスピナーアンドロイドで、特にデータ保存部で問題があります。Android SpinnerがIDを正しく返さない

まず、以下のコードの目的は何かを説明します。

私はあなたが購入する惑星を選択できるスピナーを作成したいと思います。その後、送信ボタンを押すと、「購入したかった:....」というトーストが表示され、購入が続きますユーザー名&のような要約。

しかし、プロセスの途中で、各スピンナーの要素のIDを保存するのに苦労しています。

「Earth」(id = 1)&ヒットサブミットを選択するたびに、トーストは常にid = 0の「Mars」を参照します。問題は私の送信ボタンが常に選択されたID。

意図的にintを返すようにplanetSpinner()メソッドを設定しました。したがって、返される "id"を常に追跡できます。しかし、もう一度、送信ボタンは常にid = 0になるようにします。

誰か助けてくれますか?私は本当にそれを感謝します。ありがとうございました。

スピナーコード(MainActivity.java)

public int planetSpinner(){ 
     context = this; 
     List<String> categories = new ArrayList<String>(); 
     categories.add("Mars($12 billions)"); //0 
     categories.add("Earth ($99 billions)"); //1 
     categories.add("Jupiter ($13 billions)"); //2 

     cSpinner = (Spinner) findViewById(R.id.coffee_spinner); 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories); 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     cSpinner.setAdapter(dataAdapter); 

     cSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       Toast.makeText(MainActivity.this, "You selected: " + cSpinner.getItemAtPosition(position), Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       Toast.makeText(MainActivity.this, "Nothing selected", Toast.LENGTH_LONG).show(); 
      } 
     }); 

     return cSpinner.getSelectedItemPosition(); 
    } 

購入コード(MainActivity.java)

public void submitOrder(View view){ 

     Toast.makeText(MainActivity.this, "You wanted to buy: " + planetSpinner(), Toast.LENGTH_LONG).show(); 

     displayMessage(confirmationOrder(userName, price)); 
    } 

答えて

1
public class MySpinner extends Activity implements OnItemSelectedListener{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Spinner spinner = (Spinner) findViewById(R.id.coffee_spinner); 
     spinner.setOnItemSelectedListener(this); 
     List<String> categories = new ArrayList<String>(); 
     categories.add("Mars($12 billions)"); //0 
     categories.add("Earth ($99 billions)"); //1 
     categories.add("Jupiter ($13 billions)"); //2 
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories); 

     // Drop down layout style - list view with radio button 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     // attaching data adapter to spinner 
     spinner.setAdapter(dataAdapter); 
} 
@Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     // On selecting a spinner item 
     String item = parent.getItemAtPosition(position).toString(); 

     // Showing selected spinner item 
     Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show(); 
    } 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 
    } 
} 
+0

あなたは間違っています.. cSpinner.getItemAtPosition(position)、親ビューを取得する必要がありますparent.getItemAtPosition(position).toString() –

+0

こんにちは。 Stringのid値はif文でidを使用できません。ありがとう。 – John

+0

@ジョン、上記の声明で何を意味するのですか? –

1

あなたはこの試してみる提出:それは

Toast.makeText(MainActivity.this, "You selected: " + categories.get(position), Toast.LENGTH_LONG).show(); 
+0

私はこれを最初に試してみましょう:) *編集:私はそれを試して、それはカテゴリが分かっていないと言いました。 – John

1

をなぜなら関数を呼び出すたびにスピナーが再初期化されました。したがって、選択された値は最初の項目でした。そのため、関数は常に0を返します。役立ちます。

+0

はい、それは実際に役立ちます。間違いを見つけるのを助けてくれますか?ありがとう。 – John

+0

あなたのonCreateですべてを行い、submitOrderでこれを行うだけです。 Toast.makeText(MainActivity.this "購入したい:" + cSpinner.getSelectedItemPosition()、Toast.LENGTH_LONG).show() ; ここにあなたの位置があります:) –

関連する問題