2013-10-26 7 views
0

Проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы я заполнил после того, как я выбрал (например) Канаду, но почему-то spinner2 заселяется при запуске, а не после того, как я выбираю Канаду. Я также связал массив строк с spinner2, чтобы убедиться, что он запускается с нуля, но он все равно не работает. Вот то, что я до сих пор:Spinner не работает должным образом

public class MainActivity extends Activity { 

    private Spinner spinner1, spinner2; 
    private Button button; 

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

     addListenerOnButton(); 
     addListenerOnSpinnerItemSelection(); 
     spinner1 = (Spinner) findViewById(R.id.spinner1); 

     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
     R.array.countries, 
     android.R.layout.simple_list_item_1); 

     spinner1.setAdapter(adapter); 

     spinner1.setOnItemSelectedListener(new OnItemSelectedListener() { 
      public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
       TextView tv = (TextView)v; // cast the View to a TextView 
       if ("Canada".equals(tv.getText().toString())); 
       { 
        addItemsOnSpinner2(); 
       } 
      } 

      public void onNothingSelected(AdapterView<?> arg0) { 

      } 
     }); 
    }  


    // add items into spinner dynamically 

    public void addItemsOnSpinner2() {  

     spinner2 = (Spinner) findViewById(R.id.spinner2); 
     List list = new ArrayList(); 
     list.add("hello"); 
     list.add("holla"); 
     list.add("hey"); 
     list.add("hi"); 
     ArrayAdapter dataAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, list); 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner2.setAdapter(dataAdapter); 
    }  



    public void addListenerOnSpinnerItemSelection() {  
     spinner1 = (Spinner) findViewById(R.id.spinner1);  
     spinner2 = (Spinner) findViewById(R.id.spinner2);  
     spinner1.setOnItemSelectedListener(new Spinner2());  
     spinner2.setOnItemSelectedListener(new Spinner2());  


    }  

    public void addListenerOnButton() {  

     button = (Button) findViewById(R.id.button1); 

     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Toast.makeText(MainActivity.this, 
        "Result : " + 
        "\nSpinner 1 : "+ String.valueOf(spinner1.getSelectedItem()) + 
        "\nSpinner 2 : "+ String.valueOf(spinner2.getSelectedItem()), Toast.LENGTH_SHORT).show(); 
      } 

     }); 
    }  
}  

Spinner2.java *

public class Spinner2 implements OnItemSelectedListener {  

    @Override 
    public void onItemSelected(AdapterView parent, View view, int pos, long id) { 
     Toast.makeText(parent.getContext(), 
      parent.getItemAtPosition(pos).toString(), 
      Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onNothingSelected(AdapterView parent) { 

    } 
}  

ответ

0

здесь сделка .. способ onItemSelected все еще называют, когда Spinner только что был создан без вас выбор любой вариант. Простое решение для этого, чтобы добавить дополнительный параметр в блесны Лик «Выберите» или «Нет», и имеют if-else конструкцию в onItemSelected метод так же, как это: -

@Override 
public void onItemSelected(AdapterView parent, View view, int pos, long id) { 
    if(pos==0) { 
     //do something; 
    } else { 
     Toast.makeText(parent.getContext(), 
      parent.getItemAtPosition(pos).toString(), 
      Toast.LENGTH_SHORT).show(); 
    } 
} 
0

Как @ d3m0li5h3r справедливо упоминает

onItemSelected метод еще называют, когда Spinner только инициализирован

Итак, обходной путь, вместо того, чтобы добавлять дополнительный элемент в блесны, ..

spinner1.setOnItemSelectedListener(new OnItemSelectedListener() { 
    boolean check = false; 

       public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
       if(count){ 
        TextView tv = (TextView)v; // cast the View to a TextView 
        if ("Canada".equals(tv.getText().toString())); 
        { 
         addItemsOnSpinner2(); 
        } 
       } 
        check = true; 
       } 

       public void onNothingSelected(AdapterView<?> arg0) { 

       } 
      }); 
+0

Я получил его для работы, заменив «count» на «pos == 0». 0 = первый элемент внутри счетчика – Zamornews

Смежные вопросы