2016-05-23 36 views
0

我正在为我的一个朋友(学习Java/Android应用程序)创建一个应用程序,他的客户将能够使用一系列微调器来选择特定产品的价格。当其他微调器发生变化时保持微调器选择

我被困在了一点,此刻我与spinners,我终于得到他们如何都挂在一起,我已经设法创建一些代码,将基于选择前一个微调设置一个微调选项。

这可以工作,直到在不同的微调器上进行选择。例如。 在微调器1上选择“单速”, 在微调器2上选择“4”, 在微调器3上选择“钩子”, 微调器2复位。

一旦选择了另一个微调框,我该如何阻止我的动态微调器重置?

最终,我将建立所有的纺纱机动态,因为不同的选择将决定应该提供哪些选项。

在此先感谢。 (欣赏它不是精彩的写作,希望随着时间的推移将会有所改进)。

public class priceList extends Activity implements AdapterView.OnItemSelectedListener{ 

    Spinner capacity; 
    Spinner speed; 
    Spinner hoistSpeed; 
    Spinner type; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_price_list); 


     //Spinner for Capacity 
     capacity = (Spinner) findViewById(R.id.capacityTextView); 
     ArrayAdapter adapterCapa=ArrayAdapter.createFromResource(this,R.array.arrayCapacity, android.R.layout.simple_spinner_item); 
     capacity.setAdapter(adapterCapa); 
     capacity.setOnItemSelectedListener(this); 

     //Spinner for the Speed 
     speed = (Spinner) findViewById(R.id.speedTextView); 
     ArrayAdapter adapterSpd = ArrayAdapter.createFromResource(this,R.array.arraySpeed, android.R.layout.simple_spinner_item); 
     speed.setAdapter(adapterSpd); 
     speed.setOnItemSelectedListener(this); 


     //Spinner for the type 
     type = (Spinner) findViewById(R.id.typeTextView); 
     ArrayAdapter adapterBeam=ArrayAdapter.createFromResource(this,R.array.arrayType, android.R.layout.simple_spinner_item); 
     type.setAdapter(adapterBeam); 
     type.setOnItemSelectedListener(this); 

    } 

    @Override 
    public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) { 

     //TextView myText = (TextView) view; 
     //Toast.makeText(this, myText.getText(), Toast.LENGTH_SHORT).show(); 


     hoistSpeed = (Spinner) findViewById(R.id.hoistSpeedTextView); 
     ArrayAdapter adapterTypeA=ArrayAdapter.createFromResource(this,R.array.arrayHoistSpeedSingle, android.R.layout.simple_spinner_item); 
     hoistSpeed = (Spinner) findViewById(R.id.hoistSpeedTextView); 
     ArrayAdapter adapterTypeB=ArrayAdapter.createFromResource(this,R.array.arrayHoistSpeedDouble, android.R.layout.simple_spinner_item); 

     if(speed.getSelectedItem().toString().equals("Single Speed")) 
     { 

      hoistSpeed.setAdapter(adapterTypeA); 

     } 

     else if(speed.getSelectedItem().toString().equals("Dual Speed")) 
     { 

      hoistSpeed.setAdapter(adapterTypeB); 

     } 

     } 
    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 

} 
+0

https://github.com/henrychuangtw/ReuseSpinner – HenryChuang

回答

1

你的问题是相当混乱,也许你可以改写

但你可以根据什么是在当前的微调选择只是控制或设置你的下一个微调,并适当做你检查。

你可以直接编写你的setOnItemSelectedListener,将逻辑彼此分开。

String[] speedArr = getResources().getStringArray(R.array.arraySpeed); 

    speed.setAdapter(adapter); 
      speed.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

       @Override 
       public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
        //Do your checks here, and set the next spinner, or reset the previous one. 

       //This automatically gets your selected value, so no need doing an if else check here again 
       String selectedValue = speedArr[position]; 
       } 

       @Override 
       public void onNothingSelected(AdapterView<?> arg0) { 
        // TODO Auto-generated method stub 

       } 
      }); 
+0

感谢您的回复。对困惑感到抱歉。下一个微调器的选择将根据选择前一个微调器的工作状况来确定,当选择第三个微调器时,第二微调器由于某种原因被重置。那有意义吗。我会编辑我的问题,一些逗号会有帮助。 –

+0

是的,如果你将每个微调器的setOnItemSelectedListener分开,它将解决第二个微调器被重置的问题,因为你的代码逻辑将被单独放置。重复使用此代码 –

+0

好的,谢谢+ Html Tosin,我会给你一个去。 –