Habilitar un Spinner actualmente deshabilitado en Android

Estaba jugando con Android y mi conocimiento de Java es limitado en el mejor de los casos (por ejemplo, ¡estoy perplejo por el hecho de que permite clases en línea !?).

Mi pregunta es la siguiente:

Tengo un diseño donde hay tres menús desplegables. Inicializo los tres dentro de onCreate ().

El primero toma sus valores de una matriz de cadenas. Sin embargo, el segundo depende de la elección del primero y el tercero depende de la elección del segundo.

Tengo algunas series de cadenas para el segundo Spinner, pero me preguntaba cuál sería la forma correcta de implementar una lista de Spinners habilitados sucesivamente. Estoy tentado a hackearlo y hacerlo funcionar, pero no quiero correr el riesgo de que esté malformado e inestable.

Por ejemplo, mi caso es como si tuviera elTutorial de Google Spinner con un Spinner extra para las lunas de cada planeta (y luego tal vez para los cráteres en cada una de las lunas).

En mis recursos, tengo un arrays.xml como:

<resources>

<string-array name="planets">
    <item>Mercury</item>
    <item>Venus</item>
    <item>Earth</item>
    <item>Mars</item>
    <item>Jupiter</item>
    <item>Saturn</item>
    <item>Uranus</item>
    <item>Neptune</item>
</string-array>
<string-array name="earth">
    <item>The Moon</item>
</string-array>
<string-array name="mars">
    <item>Deimos</item>
    <item>Phobos</item>
</string-array>
<string-array name="jupiter">
    <item>Metis</item>
    <item>Adrasthea</item>
    <item>Amalthea</item>
    <item>Thebe</item>
    <item>Io</item>
    <item>Europa</item>
    <item>Ganymede</item>
    <item>Callisto</item>
 [...] etc. etc. 
</resources>

En el método onCreate inicializo los tres:

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

  Spinner spinner1 = (Spinner) findViewById(R.id.planetSpinner);
  Spinner spinner2 = (Spinner) findViewById(R.id.moonSpinner);
  Spinner spinner3 = (Spinner) findViewById(R.id.craterSpinner);
  spinner2.setEnabled(false);
  spinner3.setEnabled(false);
  ArrayAdapter adapter1 = ArrayAdapter.createFromResource(
        this, R.array.planets, android.R.layout.simple_spinner_item);
  adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  spinner1.setAdapter(adapter1);
  spinner1.setOnItemSelectedListener(new MyOnPlanetSelectedListener());

}

Mi clase de oyente es

public class MyOnPlanetSelectedListener implements OnItemSelectedListener {

public void onItemSelected(AdapterView<?> parent,
    View view, int pos, long id) {
  Toast.makeText(parent.getContext()), "The planet is " +
      parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
 }

public void onNothingSelected(AdapterView parent) {
  // Do nothing.
  }
}

Entonces ahí está. Mi pregunta es dónde y cómo implementar los oyentes para los Spinners sucesivos para que estén habilitados una vez que se selecciona el primero. Mi primera suposición es:

    public class MyOnPlanetSelectedListener implements OnItemSelectedListener {

public void onItemSelected(AdapterView<?> parent,
    View view, int pos, long id) {
  Toast.makeText(parent.getContext()), "The planet is " +
      parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();

  spinner2.setEnabled(true);

 }

public void onNothingSelected(AdapterView parent) {
  // Do nothing.
  }
}

Pero obviamente esto está mal ya que spinner2 no está encapsulado aquí.

Luego, los hiladores sucesivos deberían elegir un conjunto de cuerdas para sus adaptadores, dependiendo de cuál sea la elección de los hiladores antes que ellos. Intenté encapsular los hilanderos en la clase de actividad, en el constructor, pero la aplicación se bloquea antes de ejecutarse.

Muchas gracias de antemano por tu ayuda.

Respuestas a la pregunta(2)

Su respuesta a la pregunta