2016-05-23 67 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,我會給你一個去。 –