2014-12-02 43 views
0

對Java來說很新穎。我的代碼中有3個Spinners,我的2個Spinner會根據1個主Spinner(有2個選擇)顯示列表。閱讀了幾個線程後,我閱讀了使用notifySetDataChanged()刷新列表的內容。但微調列表從未改變。幾個問題:使用1個微調器來動態更改2個微調器,使用if函數和notifyDataSetChanged?

  • 我是否正確使用notifySetDataChanged?
  • 是否有另一種方式來填充列表?
  • IF函數是否合適?

下面是onCreate方法的代碼。

public class MainActivity extends Activity { 

private Spinner spinner1, spinner2, spinner3, spinner4; 
private Button convertButton; 
private EditText from; 
private List <String> list1 = new ArrayList<String>(); 
private List <String> list2 = new ArrayList<String>(); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    from = (EditText) findViewById(R.id.amount); 



    //spinners for units 
    spinner1 = (Spinner) findViewById(R.id.spinner1); 
    spinner2 = (Spinner) findViewById(R.id.spinner2); 
    spinner4 = (Spinner) findViewById(R.id.spinner4_main); 
    List<String>list4 = new ArrayList<String>(); 

    list4.add("Distance"); 
    list4.add("Weight"); 

    //adapter for main scale 
    ArrayAdapter<String> dataAdapter4 = new ArrayAdapter <String> (this, 
             android.R.layout.simple_spinner_dropdown_item, list4); 
      dataAdapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner4.setAdapter(dataAdapter4); 

    //adapter for "from" currency 
    ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(this, 
             android.R.layout.simple_spinner_item, list1); 
      dataAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner1.setAdapter(dataAdapter1); 

    //adapter for "to" currency  
      ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, 
               android.R.layout.simple_spinner_item, list2); 
      dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner2.setAdapter(dataAdapter2); 


    Object choice = spinner4.getSelectedItemPosition(); 
    if (choice.equals("Weight")) { 
    //units to convert from 
    dataAdapter1.clear(); 
    dataAdapter1.add("Milligrams"); 
    dataAdapter1.add("Grams"); 
    dataAdapter1.add("Kilograms"); 
    dataAdapter1.add("Metric Ton"); 




    //units to convert to 
    dataAdapter2.clear(); 
    dataAdapter2.add("Milligrams"); 
    dataAdapter2.add("Grams"); 
    dataAdapter2.add("Kilograms"); 
    dataAdapter2.add("Metric Ton"); 


    } 


    else //(spinner4.getSelectedItem().toString().equals("Distance")) 
     { 

     //spinner1 = (Spinner) findViewById(R.id.spinner1); 
     dataAdapter1.clear(); 
     dataAdapter1.add("Millimeter"); 
     dataAdapter1.add("Centimeter"); 
     dataAdapter1.add("Meter"); 
     dataAdapter1.add("Kilometer"); 





     dataAdapter2.clear(); 
     dataAdapter2.add("Millimeter"); 
     dataAdapter2.add("Centimeter"); 
     dataAdapter2.add("Meter"); 
     dataAdapter2.add("Kilometer"); 



    } 

    dataAdapter1.notifyDataSetChanged(); 
    dataAdapter2.notifyDataSetChanged(); 

}` 

如果有人可以解釋什麼是錯的請指教這個新手。 =)

回答

0

你正在接近這個錯誤。這裏是你應該做的事情..

  1. 定義微調1,2和3
  2. 定義微調1,2,3 arrayAdapters。
  3. 填充ArrayAdapter和定義此作爲適配器離心器1(spinner1.setadapter(arrayadapter1)
  4. 然後調用spinner1.setOnItemSelectedListener。在該方法中onItemSelected,填充邏輯來填充旋塗器2和旋轉器3作爲陣列按您的要求。然後,即使用戶點擊呼叫spinner2.setadapter(arrayadapter2)和spinner3.setadapter(arrayadapter3)。
  5. 這應該工作。

所以最初,spinner2和spinner3不會有任何內容,下拉列表中沒有任何內容,但一旦用戶選擇了Spinner1,spinner2和spinner3將會有下拉值。

請閱讀setOnItemSelectedListener。很多教程都可用。你可以參考here開始。

如果這適用於您,請接受我的回答。

0
Object choice = spinner4.getSelectedItemPosition(); 

這是行不通的。 getSelectedItemPosition()

返回intdocumentation),這將不等於你String

if (choice.equals("Weight") 

永遠不要(除了在極少數情況下)使用Object類作爲參考,因爲任何和每一個對象Java將是一個Object(杜!),所以你可能比較蘋果與橙子(這都是水果)。好像你是來自一種更弱的語言,呃? ;)

解決方案:比較的位置:

if (spinnerX.getSelectedItemPosition == 0)... 

另外,你確定你想,如果在spinner4選擇什麼來改變的spinner1的內容?

+0

有沒有更好的方法來改變spinner1的內容?或者我做錯了什麼 – Neaco 2014-12-03 02:37:23