1

好的,所以我正在尝试创建一个活动来计算给定空间的面积。

我希望用户能够在“m”或“ft”中输入尺寸。答案需要在最后以米为单位给出。

对,现在解决问题。

下面的代码有效,问题是程序假设 num1 和 num2 都等于上次使用的微调器中选择的值。因此,如果您为 num1 输入 100 ft,然后为 num2 输入 10m,它会给出 1000m 的答案,因为您最后选择了 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(""); 
    }
4

2 回答 2

0

在 onItemSelected() 中,您可以使用 v.getId() 查看是否为 R.id.Spinner01 或 R.id.Spinner02 调用它,并更新 opselected 或 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("");
}
于 2012-07-01T15:45:54.310 回答
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 m,那么结果将是 3 米。

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

后来,--jim

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

于 2012-07-02T02:39:54.987 回答