在计算中使用多个Spinner

时间:2012-07-01 15:11:46

标签: java android

好的,所以我正在尝试创建一个能够解决给定空间区域的活动。

我希望用户能够以“m”的“ft”输入尺寸。答案必须以米为单位给出。

是的,现在问题。

下面的代码有效,问题是程序假定num1和num2都等于上次使用的微调器中选择的值。因此,如果您输入100英尺的num1然后输入10米的num2,它会给出1000米的答案,因为您最后选择了m单位。它应该给出92.9的答案......

过去几天一直很头疼......

任何人都可以帮助我!?!

提前致谢 将

private OnClickListener myClickListener = new OnClickListener()
{
    public void onClick(View v) {
        try{

        a=Double.parseDouble(num1.getText().toString());
        b=Double.parseDouble(num2.getText().toString());}
        catch(Exception e)
        {
            if(num1.getText().length()==0)
            {
                num1.setError("please input width");
            }
            if(num2.getText().length()==0)
            {
                num2.setError("please input length");
            }

        }

        if (opselected=="ft" && opselected1=="ft")
        {c=((a * 0.0929) * (b * 0.0929));tv1.setText(Double.toString(c));}
        else if (opselected=="m" && opselected1=="m")
        {c=( a * b);tv1.setText(Double.toString(c));}
        else if (opselected=="m" && opselected1=="ft")
        {c= (a * (b * 0.0929));tv1.setText(Double.toString(c));}
        else if (opselected=="ft" && opselected1=="m")
        {c= ((a * 0.0929) * b);tv1.setText(Double.toString(c));}



        else {tv1.setText("select units");}
        //tv1 = (TextView)findViewById(R.id.TextView01);


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

       tv1 = (TextView)findViewById(R.id.TextView01);


       button01 = (Button)findViewById(R.id.Button01);
       button01.setText("Display Air Volume");
       button01.setOnClickListener(myClickListener);



       num1 = (EditText)findViewById(R.id.EditText01);
       num2 = (EditText)findViewById(R.id.EditText02);



       spinOps = (Spinner)findViewById(R.id.Spinner01);
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(
         this, android.R.layout.simple_spinner_item, ops);
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       spinOps.setAdapter(adapter);
       spinOps.setOnItemSelectedListener(this);

       spinOps1 = (Spinner)findViewById(R.id.Spinner02);
       ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(
         this, android.R.layout.simple_spinner_item, ops1);
       adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       spinOps1.setAdapter(adapter);
       spinOps1.setOnItemSelectedListener(this);

    }   
    public void onItemSelected (AdapterView<?> p,View v,int position,long id) {
        opselected=ops[position];
        opselected1=ops1[position];
        tv1.setText("");
    }
    public void onNothingSelected(AdapterView<?> p) { 
        tv1.setText(""); 
    }

2 个答案:

答案 0 :(得分:0)

在onItemSelected()中,您可以使用v.getId()来查看是否为R.id.Spinner01或R.id.Spinner02调用它,并更新opselected OR opselected1,而不是两者。例如:

public void onItemSelected (AdapterView<?> p,View v,int position,long id) {
    if (v.getId() == R.id.Spinner01)
        opselected=ops[position];
    else if (v.getId() == R.id.Spinner02)
        opselected1=ops1[position];
    tv1.setText("");
}

答案 1 :(得分:0)

为每个微调器提供其自己的侦听器。例如,您有

的地方
  spinOps.setOnItemSelectedListener(this);

将其替换为更像这样的东西:

  spinOps.setOnItemSelectedListener(new onItemSelectedListener() {
      public void onItemSelected(AdapterView<?> p, View v, int position, long id) {
         // get the value entered and the unit selected (e.g., val0, unit0)
      }
  });

做同样的事情(除了使用val1和unit1,它将是spinOps1 ....)如果是 单位是不同的,选择一个并转换另一个匹配。换句话说,如果 用户选择第一个39英寸,第二个选择2米,你想要 以米为单位,39英寸= 1米,结果为3米。

有关详细信息,请参阅http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html。 (只需搜索onItemSelectedListener并获取第一个结果....)

后来    --Jim

PS:是的,我知道,我用的是英寸而不是英尺......保持简单: - )