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

相关问题