2016-09-07 67 views
2

我在微調android有困難,更具體的數據保存部分。Android微調不正確返回Id

首先,我要告訴你下面的代碼背後的目的是什麼。

我想創建一個微調器,用戶可以選擇要購買哪個行星,然後當他/她點擊提交按鈕時,一個敬酒會出現「您想要購買:....」,然後購買總結如用戶名&價格。

但是,在這個過程中,我很難保存每個微調元素的id。

每次我選擇「地球」(id = 1)&點擊提交,敬酒將始終引用回到「火星」其id = 0。所以看來,問題是我的提交按鈕將始終重置選擇的ID。

我故意設置planetSpinner()方法返回int,因此我總是可以追蹤返回的「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(位置),你必須採取父視圖,parent.getItemAtPosition(位置).toString() –

+0

嗨,是不是,如果我得到String中的id值,那麼我不能在任何if語句中使用id?謝謝。 – John

+0

@John,我沒有明白上面的陳述是什麼意思? –

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() ; 你得到的位置:) –