2012-02-09 43 views
0

我正试图在一项活动中实施多个纺纱工,看起来工作正常。我遇到的问题是当我试图使用onItemSelected输出他们的选项时,我无法弄清楚如何告诉这个方法哪个微调器刚刚更新。我将复制代码,但这里是onItemSelected方法的摘录。例如,如果我有两个旋转器,只会显示intTypeItems微调器的结果。如何访问onItemSelected中的不同数组数据?

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
    selection.setText(intTypeItems[position]); 
} 

这是我正在使用的完整课程。

public class Calculator extends Activity implements AdapterView.OnItemSelectedListener { 
    private TextView selection; 
    private static final Integer[] intNoItems={1,2,3}; 
    //private static final String[] intNoItems={"one","two","three"}; 
    private static final String[] intTypeItems={"Seconds","Minutes","Hours","Days"};  

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.calculator); 
    Spinner intNo=(Spinner)findViewById(R.id.intervalNo); 
    Spinner intType=(Spinner)findViewById(R.id.intervalType); 

    intNo.setOnItemSelectedListener(this); 
    intType.setOnItemSelectedListener(this); 

    selection=(TextView)findViewById(R.id.outPutValues); 

    ArrayAdapter<Integer> intNolist=new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item,intNoItems); 
    ArrayAdapter<String> intTypelist=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,intTypeItems); 

    intNolist.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    intTypelist.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    intNo.setAdapter(intNolist); 
    intType.setAdapter(intTypelist); 
} 

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
    selection.setText(casting + intTypeItems[position]); 
} 

@Override 
public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 
} 

} 

其中一个spinners是一个int另一个字符串,所以当输出到我的选择文本视图时,我还需要将int转换为字符串。我又不知道该怎么做,因为当字符串获得回调时,转换会导致异常?

回答

1

你应该拥有你需要的一切。查看来电:

public void onItemSelected(AdapterView<?> parent, View v, int position, long id); 

即第一个参数,parent,包含该项目属于View。在你的情况下,它将是intNointType。如果你保持这些变量作为字段,然后你可以测试一下,看看你在哪个Spinner,像这样:

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
    if(parent == intNo) { 
     selection.setText(casting + intNoItems[position]); 
    } else if(parent == intType) { 
     selection.setText(casting + intTypeItems[position]); 
    } 
} 
+0

我喜欢这个想法,看起来像我明白的代码,对我来说这很好,因为这个Java很混乱!无论如何,我已经尝试过,但我的Eclipse抱怨intNo和intType没有被解析为变量? – Purplemonkey 2012-02-09 17:02:48

+0

这就是为什么我说“如果你把这些变量保存为字段”。看到'私人TextView选择;'线?创建'Spinner intNo;'和'Spinner intType;'在那里,并将您的'onCreate()'中的用法更改为'intNo =(Spinner)findViewById(R.id.intervalNo);' – 2012-02-09 17:19:51

+0

真棒,抱歉,我不知道什么变量作为字段的意思,但从你的答复的其余部分我明白了什么是错误的,我需要将intNo和intType字符串的声明移到我的方法之外(我在这里学习)无论如何,我已经做到了这一点,它的工作原理一种享受。非常感谢。现在到数学:) – Purplemonkey 2012-02-09 17:38:00

1

您已将同一个监听器连接到两个旋转器。清洁方式,可以使用不同的听众为他们每个人的

intNo.setOnItemSelectedListener(new FirstListener()); 
intType.setOnItemSelectedListener(new SecondListener()); 

写两个独立的内部类,FirstListener和SecondListener

OR

匿名innerclasses类似下面

intNo.setOnItemSelectedListener(
    new View.OnClickListener() { 
     public void onClick(View v) { 
      //Your code here. 
     } 
    } 
); 
+0

抱歉,我不能工作,这些解决方案出来。我认为在我的Java经验中,我需要一个更大的例子来展示它如何联系在一起。我还想要最少量的代码,而你的第二个例子提示代码翻倍? – Purplemonkey 2012-02-09 17:09:25