2011-06-10 41 views
0

我正在尝试更改我的两个Spinners的内容。所以,我有我的纱厂创建:如何更改我的微调器正在使用的字符串阵列?

 Spinner spinner01 = (Spinner) findViewById(R.id.Spinner01); 
    Spinner spinner02 = (Spinner) findViewById(R.id.Spinner02); 
    ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
      this, R.array.MetricUnitsArray, android.R.layout.simple_spinner_item); 
    ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
      this, R.array.MetricUnitsArray, android.R.layout.simple_spinner_item); 


    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    spinner01.setAdapter(adapter1); 
    spinner02.setAdapter(adapter2); 

    spinner01.setOnItemSelectedListener(new MyOnItemSelectedListener1()); 
    spinner02.setOnItemSelectedListener(new MyOnItemSelectedListener2()); 

现在,从不同的方法,我希望能够做这样的事情:

adapter1 = ArrayAdapter.createFromResource(
      this, R.array.ImperialUnitsArray, android.R.layout.simple_spinner_item); 
    adapter2 = ArrayAdapter.createFromResource(
      this, R.array.ImperialUnitsArray, android.R.layout.simple_spinner_item); 

反正是有得到适配器从读不同的字符串数组?或者我应该用新的替换字符串数组中的值?

回答

0

可以使用ArrayAdapter的getter/setter方法:

E.g:

adapter1.clear(); 
adapter1.addAll(theNewListOfValues); 
adapter1.notifyDatasetChanged(); 
+0

真棒,谢谢。很明显,我是新手,所以我仍然遇到麻烦。 我试图从不同的方法使用'adapter1.clear()',但无法解析adapter1。在其他情况下,我已经能够将变量公开化,并且只是在课堂上坐下来。在这种情况下,除非我在onCreate方法中初始化适配器,否则我会遇到强制关闭问题。无论如何,从同一个类中的不同方法访问适配器? – ajwest 2011-06-11 16:06:54

+0

Bah,我很愚蠢。我正在初始化适配器错误。再次感谢。 – ajwest 2011-06-11 16:19:06

0

您应该能够只是调用setAdapter你的纺纱用新的适配器。我建议在创建它们之后,将适配器作为字段存储在您的活动中,这样如果您需要再次在适配器之间进行交换,您可以轻松地重新使用它们。

1

为要分配给spinner2的每个阵列创建单独的适配器。 将它们声明为final。 在设置spinner1 ItemSelected侦听器之前放置适配器声明。 在spinner1 ItemSelected侦听器中,根据需要设置适当的适配器。

在下面的代码中,我有两个spinners。 spinner1具有4个包含传感器类型的条目,当选择其中一个传感器类型时,spinner2将使用该传感器类型的各种型号进行填充。

public class MainActivity extends Activity { 

void showToast(CharSequence msg) { 
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); 
} 

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

    final Spinner s1 = (Spinner) findViewById(R.id.spinner_sensor_type); 
    final Spinner s2 = (Spinner) findViewById(R.id.spinner_sensor_model); 
    final ArrayAdapter<CharSequence> sensor_adapter = ArrayAdapter.createFromResource(
      this, R.array.sensors,android.R.layout.simple_spinner_item); 
    sensor_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    final ArrayAdapter<CharSequence> pa_adapter = ArrayAdapter.createFromResource(
      this, R.array.pa_models,android.R.layout.simple_spinner_item); 
    final ArrayAdapter<CharSequence> ca_adapter = ArrayAdapter.createFromResource(
      this, R.array.ca_models,android.R.layout.simple_spinner_item); 
    final ArrayAdapter<CharSequence> ni_adapter = ArrayAdapter.createFromResource(
      this, R.array.ni_models,android.R.layout.simple_spinner_item); 
    final ArrayAdapter<CharSequence> ni_fe_adapter = ArrayAdapter.createFromResource(
      this, R.array.ni_fe_models,android.R.layout.simple_spinner_item); 
    pa_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    ca_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    ni_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    ni_fe_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    s1.setAdapter(sensor_adapter); 
    s2.setAdapter(pa_adapter); // set default array values in spinner 2 
    s1.setOnItemSelectedListener(
      new OnItemSelectedListener() { 
       public void onItemSelected(
         AdapterView<?> parent, View view, int position, long id) { 
        showToast("Sensor Type: position=" + position + " id=" + id); 
        switch (position) { 
        case 0: 
         s2.setAdapter(pa_adapter);       
          break; 
        case 1: 
         s2.setAdapter(ca_adapter); 
          break; 
        case 2: 
         s2.setAdapter(ni_adapter); 
          break; 
        case 3: 
         s2.setAdapter(ni_fe_adapter); 
        default: // Do this... 
          break; 
       } 

       } 

       public void onNothingSelected(AdapterView<?> parent) { 
        showToast("Sensor Type: unselected"); 
       } 
      }); 



    s2.setOnItemSelectedListener(
      new OnItemSelectedListener() { 
       public void onItemSelected(
         AdapterView<?> parent, View view, int position, long id) { 
        showToast("Sensor Model: position=" + position + " id=" + id); 
       } 

       public void onNothingSelected(AdapterView<?> parent) { 
        showToast("Sensor Model: unselected"); 
       } 
      }); 
} 

}