2017-05-02 55 views

回答

0

您只需將所有4個EditText的可見性設置爲false並將偵聽器設置爲微調器即可。並在偵聽器中添加if else語句,並根據所選內容爲EditText字段設置可見性。

1

我會建議在你的微調器上使用OnItemSelectedListener(),同時設置你的'人'字段的setVisibility()

此代碼將假定您的最小人數爲1.每次從微調器中選擇一個新值時,字段將顯示或消失。使用GONE進行可見性將隱藏該字段,但也會刪除其使用的空間。如果您想保留空間,請使用INVISIBLE

也不要打擾在XML佈局代碼中設置可見性,因爲這可能會導致問題。

person1 = (EditText)findViewById(R.id.person1); 
    person2 = (EditText)findViewById(R.id.person2); 
    person3 = (EditText)findViewById(R.id.person3); 
    person4 = (EditText)findViewById(R.id.person4); 

    list = new ArrayList<String>(); 

    list.add("1"); 
    list.add("2"); 
    list.add("3"); 
    list.add("4"); 

    spinner = (Spinner)findViewById(R.id.spinner); 

    ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
     { 
      spinnerValue = parent.getItemAtPosition(position).toString(); 

      int value = Integer.parseInt(spinnerValue); 

      // Simpler logic for the visibility of the 'people' - kudos to RobCo for pointing this out// 
      person1.setVisibility(value>=1? view.VISIBLE:View.GONE); 
      person2.setVisibility(value>=2? view.VISIBLE:View.GONE); 
      person3.setVisibility(value>=3? view.VISIBLE:View.GONE); 
      person4.setVisibility(value>=4? view.VISIBLE:View.GONE); 

      /* 
      if (value == 1) 
      { 
       person1.setVisibility(View.VISIBLE); 
       person2.setVisibility(View.GONE); 
       person3.setVisibility(View.GONE); 
       person4.setVisibility(View.GONE); 
      } 
      else if (value == 2) 
      { 
       person1.setVisibility(View.VISIBLE); 
       person2.setVisibility(View.VISIBLE); 
       person3.setVisibility(View.GONE); 
       person4.setVisibility(View.GONE); 
      } 
      else if (value == 3) 
      { 
       person1.setVisibility(View.VISIBLE); 
       person2.setVisibility(View.VISIBLE); 
       person3.setVisibility(View.VISIBLE); 
       person4.setVisibility(View.GONE); 
      } 
      else 
      { 
       person1.setVisibility(View.VISIBLE); 
       person2.setVisibility(View.VISIBLE); 
       person3.setVisibility(View.VISIBLE); 
       person4.setVisibility(View.VISIBLE); 
      } 
      */ 

     } 

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

     } 
    }); 

祝你好運。

+0

好主意,除了大量的if-else語句有很多重複。你可以做'person1.setVisibility(value> = 1? View.VISIBLE:View.GONE);'爲每個視圖添加一次。 – RobCo

+0

我還沒有嘗試過,但是如果它可以工作,它可以減少'if'循環...雖然'if else'循環只是檢查整數值,所以我不確定性能對應用程序嗎? – ConorBeckett

+0

表現不會是問題。這關乎可讀性和可維護性。如果你想增加10行的最大行數,你現在必須添加接近100行,而不是僅僅是6. – RobCo