2012-11-14 7 views
0

스피너 2에서 내 Spinner1 변경 사항을 확인하려고합니다. 내 코드는 정상적으로 컴파일되지만 열 때 앱이 다운됩니다.Spinner 앱이 열릴 때 충돌이 발생합니다.

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

    Spinner spinner = (Spinner)findViewById(R.id.spinner2); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    { 

     public void onNothingSelected(AdapterView<?> arg0) { 

     } 

     public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
      Spinner spinner = (Spinner)findViewById(R.id.spinner2); 
      Spinner spinner1 = (Spinner)findViewById(R.id.spinner1); 
      TextView textview1 = (TextView)findViewById(R.id.textView1); 

      if (spinner.getSelectedItemPosition() == 1) { 
       textview1.setVisibility(View.VISIBLE); 
       spinner1.setVisibility(View.VISIBLE); 
      } 
     } 
    }); 
} 
+8

로그 고양이 오류 게시 – RajeshVijayakumar

+0

내 생각 엔 ... 당신의'activity_main.xml'에 리소스 아이디가 'spinner2' 인'Spinner'가없고'NullPointerException'이 생겼습니다. 'activity_main.xml'을 게시하십시오. – Squonk

+0

주 메인 XML에 spinner2가 있습니다. –

답변

1

이벤트 중에 ID를 설정하지 마십시오. 그것 단순히 좋지 않다;

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

    Spinner spinner = (Spinner)findViewById(R.id.spinner2); 
    Spinner spinner1 = (Spinner)findViewById(R.id.spinner1); 
    TextView textview1 = (TextView)findViewById(R.id.textView1); 


    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    { 

     public void onNothingSelected(AdapterView<?> arg0) { 

     } 

     public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
      if (spinner.getSelectedItemPosition() == 1) { 
       textview1.setVisibility(View.VISIBLE); 
       spinner1.setVisibility(View.VISIBLE); 
      } 
     } 
    });} 
+0

'onItemSelected (...) '메소드에서 뷰를 찾는데 문제가 있다고 생각하는 이유를 모르겠습니다. 게다가, OP는 아이템이 선택 될 때가 아니라 앱이 열릴 때 크래시가 발생한다고 말한다. 제안 된 변경 사항으로 인해 차이가 발생하지 않아야합니다. – Squonk

+0

:) 나도 같은 시간에 한 번 @ 스퀘크 생각, 회 전자가 만들어 질 때마다이 방법을 호출합니다. 왜냐하면 스피너는 우리가 선택하기 전에 누군가 항목을 대체하기 때문입니다. 즉, 이미 첫 번째 옵션을 선택하고 기본 선택으로 표시합니다. –

0

이 좋아, 그래서 seleced 항목을

주요 코드를 확인하기 위해 클래스를 사용하여 초기 응용 프로그램 충돌을 해결 : 이런 식으로 할

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Spinner spinner = (Spinner)findViewById(R.id.spinner2); 
    spinner.setOnItemSelectedListener(new checkSelectedItem()); 
} 

내 클래스 :

public class checkSelectedItem implements OnItemSelectedListener { 

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
    Spinner spinner1 = (Spinner)parent.findViewById(R.id.spinner1); 
    TextView textview1 = (TextView)parent.findViewById(R.id.textView1); 
    if (pos == 1) { 
     textview1.setVisibility(View.VISIBLE); 
     spinner1.setVisibility(View.VISIBLE); 
    } 
    else { 
     if (textview1.getVisibility() == View.VISIBLE) { 
      textview1.setVisibility(View.INVISIBLE); 
     } 
     if (spinner1.getVisibility() == View.VISIBLE) { 
      spinner1.setVisibility(View.INVISIBLE); 
     } 
    } 
} 

public void onNothingSelected(AdapterView parent) { 

} 

초기 충돌이 수정되었지만 이제는 스피너 2에서 옵션 1을 선택하면 앱이 충돌합니다 ..

관련 문제