2013-09-06 3 views
1

두 개의 스피너가 있습니다. 하나는 높이 단위이고 다른 하나는 무게 단위입니다. 내 레이아웃에는 높이와 무게 둘 다에 대한 두 개의 edittext 필드가 있습니다. 특정 회 전자 아이템이 선택되면 하나를 숨기고 싶습니다. 나는이 일에 익숙하지 않았기 때문에 어떤 도움을 주시면 감사하겠습니다. 미리 감사드립니다.특정 스피너 항목을 선택할 때 editText를 숨기려고합니다

I.E. 높이 스피너 CM이 선택되면 두 번째 높이 edittext 필드를 숨기고 싶습니다.

내 스피너 값은 문자열 파일의 배열입니다. 여기

내 코드입니다 :

strings.xml의

<string name="weight_kg">KG</string> 
<string name="weight_lb">LB</string> 
<string name="weight_st_lb">ST + LB</string> 
<string name="height_ft_in">FT + IN</string> 
<string name="height_cm">CM</string> 
<string-array name="weight_spinner">   
    <item>@string/weight_kg</item> 
    <item>@string/weight_lb</item> 
    <item>@string/weight_st_lb</item> 
</string-array> 
<string-array name="height_spinner">   
    <item>@string/height_cm</item> 
    <item>@string/height_ft_in</item> 
</string-array> 

Bmi.java

package com.Health.Kicks.Calcs.Admob; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.support.v4.app.NavUtils; 
import android.annotation.TargetApi; 
import android.os.Build; 

public class Bmi extends Activity { 

    EditText height1, weight1, height, weight; 
    Spinner height_spinner, weight_spinner; 
    String heightInputString, weightInputString; 
    Button calculatebmi; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_bmi); 

      // Show the Up button in the action bar. 
     setupActionBar(); 
     setupSpinners(); 
    } 

    void setupSpinners() { 

     height_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       if (position == 0){ 
        height1.setVisibility(View.GONE); 
       } else { 
        height1.setVisibility(View.VISIBLE); 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 

    } 
    /** 
    * Set up the {@link android.app.ActionBar}, if the API is available. 
    */ 
    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    private void setupActionBar() { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
      getActionBar().setDisplayHomeAsUpEnabled(true); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.bmi, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      // This ID represents the Home or Up button. In the case of this 
      // activity, the Up button is shown. Use NavUtils to allow users 
      // to navigate up one level in the application structure. For 
      // more details, see the Navigation pattern on Android Design: 
      // 
      // http://developer.android.com/design/patterns/navigation.html#up-vs-back 
      // 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

} 

로그 캣 :

09-07 09:19:55.366: E/AndroidRuntime(1056): FATAL EXCEPTION: main 
09-07 09:19:55.366: E/AndroidRuntime(1056): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Health.Kicks.Calcs.Admob/com.Health.Kicks.Calcs.Admob.Bmi}: java.lang.NullPointerException 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.os.Looper.loop(Looper.java:137) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at java.lang.reflect.Method.invoke(Method.java:525) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at dalvik.system.NativeStart.main(Native Method) 
09-07 09:19:55.366: E/AndroidRuntime(1056): Caused by: java.lang.NullPointerException 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at com.Health.Kicks.Calcs.Admob.Bmi.setupSpinners(Bmi.java:35) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at com.Health.Kicks.Calcs.Admob.Bmi.onCreate(Bmi.java:30) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.Activity.performCreate(Activity.java:5133) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  ... 11 more 
09-07 09:19:55.366: E/AndroidRuntime(1056): FATAL EXCEPTION: main 
09-07 09:19:55.366: E/AndroidRuntime(1056): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Health.Kicks.Calcs.Admob/com.Health.Kicks.Calcs.Admob.Bmi}: java.lang.NullPointerException 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.os.Looper.loop(Looper.java:137) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at java.lang.reflect.Method.invoke(Method.java:525) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at dalvik.system.NativeStart.main(Native Method) 
09-07 09:19:55.366: E/AndroidRuntime(1056): Caused by: java.lang.NullPointerException 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at com.Health.Kicks.Calcs.Admob.Bmi.setupSpinners(Bmi.java:35) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at com.Health.Kicks.Calcs.Admob.Bmi.onCreate(Bmi.java:30) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.Activity.performCreate(Activity.java:5133) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
09-07 09:19:55.366: E/AndroidRuntime(1056):  ... 11 more 
+0

가 두 번째 높이 항목을 의미합니까 & 버튼, 회 전자의 EditTexts을 설정해야합니까? – Si8

답변

0

각각에 대한 setOnItemSelectedListener이 할 스피너 설정 티 당신을위한 일 ...

I.E. 높이 스피너 CM이 선택되면 두 번째 높이 edittext 필드를 숨기고 싶습니다.

업데이트 : 당신은 또한

EditText height1, weight1, height, weight; 
Spinner height_spinner, weight_spinner; 
String heightInputString, weightInputString; 
Button calculatebmi; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_bmi); 

    // set your class members as they start out null. 
    // do this for all of them 
    height1 = (EditText) findViewById(R.id.idofheight1inxml); 
    height_spinner = (Spinner) findViewById(R.id.idofheightspinnerinxml); 
    .... 

     // Show the Up button in the action bar. 
    setupActionBar(); 
    setupSpinners(); 
} 


void setupSpinners(){ 
    height_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     //I.E. if in the height spinner CM is selected I would like to hide the second height edittext field. 
     // I'm not sure if this is meant to be "height1" or "height" 
      if (position == 0){ 
       height.setVisibility(View.GONE); 
      } else { 
       height.setVisibility(View.VISIBLE); 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

    // if you want to add similar logic for weight spinner, do that with this : 
    weight_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      // put your code here for weight spinner 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 
} 
+0

입력 해 주셔서 감사합니다. @ SiKni8 네, 두 번째 높이 항목을 의미합니까. – user2753285

+0

감사합니다. @petey 나는 activity_bmi 앱 오류를 실행하고 닫을 때 내가 제안한 것을 수행했습니다. 원래 코드를 편집하여 지금 가지고있는 것을 볼 수 있습니다. – user2753285

+0

whats the error (check logcat) – petey

관련 문제