2012-07-01 683 views
1

좋아, 그래서 주어진 공간의 영역 밖으로 작동하는 활동을 만들려고 노력하고있어.계산에서 둘 이상의 Spinner 사용

사용자가 "m"의 "ft"중 하나에 치수를 입력 할 수있게하려고합니다. 답은 미터로 표시해야합니다.

지금 문제가 발생했습니다.

아래의 코드가 작동하면 문제는 프로그램에서 num1과 num2가 둘 다 사용 된 마지막 회 전자에서 선택된 것과 같다고 가정합니다. 따라서 num1에 대해 100ft를 입력 한 다음 num2에 대해 10m를 입력하면 m 단위를 마지막으로 선택하기 때문에 1000m의 답을 제공합니다.

누구든지 나를 도울 수 ...

이 지난 몇 일 동안 두통이되었습니다 ... 92.9의 답을 제공한다!?! 사전에

감사 윌

onItemSelected(), 당신은이 R.id.Spinner01 또는 R.id.Spinner02을 촉구했다 있는지 확인하기 위해) v.getId를 (사용 및 업데이트에
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(""); 
    } 
+0

위 코드를 어떻게 수정해야 하는지를 보여줄 수 있습니까? – Will

답변

0

각 스피너에 OWN 리스너를 지정하십시오. 예를 들어, 어디

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 인치 = 1m이므로 결과는 3 미터가됩니다.

자세한 내용은 http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html을 참조하십시오. ,

나중에 --jim

PS를 (그냥 .... onItemSelectedListener를 검색하고 첫 번째 결과를 가지고) : 그래, 나도 알아, 내가 대신 피트 인치 ... 간단하게 유지를 사용 : -)

+0

Jim, 포인터를 주셔서 감사 드리며 간단하게 유지하고 있지만 여전히 완전히 잃어버린 것 같습니다 ... 위의 방법으로 어떻게 구현할 수 있는지 보여줄 수 있습니까? – Will

+0

내가 보여 주듯이, 각 회 전자에 대한 청취자가 있습니다. 어떤 값을 주 었는지 또는 어떤 단위를 사용했는지를 분류 할 필요가 없습니다. 두 가지 별개의 결과이며 각각에 대해 서로 다른 변수를 지정할 수 있습니다 (예 : res1 및 unit1, res2 및 unit2) 단위. 필요에 따라 둘 중 하나를 다른 단위로 변환하십시오. Android Developers 목록 아카이브에서 예를 보여주는 대화를 검색 할 수 있습니다. 그게 원래 내가 이런 식으로 할 수 있음을 알게되었습니다. 내가 검색 한 키워드를 잊어 버렸습니다 ... 죄송합니다. – GTbrewer

+0

참고로, 두 개의 스피너를 같은 위치에 놓고 (RelativeLayout을 사용하여) 각 스피너의 가시성을 변경하여 화면에있는 컨트롤을 제어 할 수도 있습니다. foo.setVisibility (View.VISIBLE) 또는 foo.setVisibility (View.INVISIBLE). 그런 다음 첫 번째 작업을 마쳤 으면 보이지 않게 설정하고 두 번째는 보이도록 설정 한 다음 두 번째 작업을 완료하면 보이지 않게 설정할 수도 있습니다. – GTbrewer

0

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(""); 
} 
+0

흠, havent, 아직이 기능을 가로 질러 와라. .. 나는 아직도 이것을 아주 새롭게했다. 어떤 식 으로든이 코드를 구현할 수있는 방법을 보여줌으로써 도움을받을 수 있습니까? – Will

+0

답변에 추가 답변을 제공하는 대신 – Steelight

+0

hmmm, 이제는 유닛을 선택하라고 알려줍니다. 어떤 아이디어 (당신의 입력에 대한 지금까지의 강철)을 – Will