Java 在Android中启用当前禁用的微调器

Java 在Android中启用当前禁用的微调器,java,android,spinner,Java,Android,Spinner,我只是在玩Android,我的Java知识充其量也有限(例如,我对它允许内联类的事实感到困惑!) 我的问题如下: 我有一个布局,其中有三个下拉菜单。我在onCreate()中初始化了这三个选项 第一个从字符串数组中获取其值。然而,第二个取决于第一个的选择,第三个取决于第二个的选择 对于第二个微调器,我有一些字符串数组,但我想知道实现连续启用的微调器列表的正确方法是什么。我很想侵入它并让它工作,但我不想冒它格式不正确和不稳定的风险 例如,看在上帝的份上,我的案例就好像我有一个额外的旋转器,用于每个

我只是在玩Android,我的Java知识充其量也有限(例如,我对它允许内联类的事实感到困惑!)

我的问题如下:

我有一个布局,其中有三个下拉菜单。我在onCreate()中初始化了这三个选项

第一个从字符串数组中获取其值。然而,第二个取决于第一个的选择,第三个取决于第二个的选择

对于第二个微调器,我有一些字符串数组,但我想知道实现连续启用的微调器列表的正确方法是什么。我很想侵入它并让它工作,但我不想冒它格式不正确和不稳定的风险

例如,看在上帝的份上,我的案例就好像我有一个额外的旋转器,用于每个行星的卫星(然后可能用于每个卫星上的陨石坑)

在我的参考资料中,我有一个arrays.xml,例如:

<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>
我的听众课是

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.
  }
}
公共类MyOnPlanetSelectedListener实现OnItemSelectedListener{
已选择公共无效项(AdapterView父项,
视图,内部位置,长id){
Toast.makeText(parent.getContext()),“星球是”+
parent.getItemAtPosition(pos.toString(),Toast.LENGTH_LONG.show();
}
未选择公共无效(AdapterView父级){
//什么也不做。
}
}
就是这样。我的问题是在哪里以及如何实现连续微调器的侦听器,以便在选择第一个微调器后启用它们。我的第一个猜测是:

    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.
  }
}
公共类MyOnPlanetSelectedListener实现OnItemSelectedListener{
已选择公共无效项(AdapterView父项,
视图,内部位置,长id){
Toast.makeText(parent.getContext()),“星球是”+
parent.getItemAtPosition(pos.toString(),Toast.LENGTH_LONG.show();
喷丝头2.设置启用(真);
}
未选择公共无效(AdapterView父级){
//什么也不做。
}
}
但这显然是错误的,因为喷丝头2并没有封装在这里

然后,后续微调器应根据之前微调器的选择为其适配器选择字符串数组。我尝试将微调器封装在活动类和构造函数中,但应用程序在运行前崩溃


非常感谢您的帮助。

使用
onItemSelected
视图
参数来决定哪个微调器发送了
onItemSelected
事件。这样做的逻辑很简单

让喷丝头1、2和3成为班级成员(活动)

然后只需将
视图
参数与

if (view==this.spinner1) {
   // event came from spinner 1
   // create a new adapter, assign the new adapter to spinner 2
} else if (view==this.spinner2) {
   // event came from spinner 2
}
尝试使用以下方法:

    switch(parent.getId())
    {
    case R.id.spinner1:
        Log.d(TAG,"spinner1");
        break;
    case R.id.spinner2:
        Log.d(TAG,"spinner2");
         break;

    }

祝你好运

嘿,谢谢!不过,为了澄清一下,您的意思是为所有三个微调器实现一个侦听器,只在侦听器内部进行测试以查看它来自哪个微调器吗?非常抱歉,您是否介意更详细地解释一下您将如何实现这一点?我完全迷路了。再次感谢!是的,所有三个微调器都需要一个侦听器。谢谢,如果您不介意的话,我将非常感谢您提供进一步的指针,说明如何准确地使用view参数来提取发送事件的微调器!干杯。啊哈,我现在明白你的意思了,非常感谢,我要试一试!
if (view==this.spinner1) {
   // event came from spinner 1
   // create a new adapter, assign the new adapter to spinner 2
} else if (view==this.spinner2) {
   // event came from spinner 2
}
    switch(parent.getId())
    {
    case R.id.spinner1:
        Log.d(TAG,"spinner1");
        break;
    case R.id.spinner2:
        Log.d(TAG,"spinner2");
         break;

    }