2011-03-07 2 views
2

스피너의 onItemSelected 이벤트를 처리하는 리스너 클래스에서 TextView by ID를 얻으려고합니다. 내 주요 활동에서 findViewById (R.id.textView1)를 호출 할 수 있으며 정상적으로 작동합니다. 그러나 내 스피너 리스너 클래스에서 동일한 함수를 호출하면 항상 null을 반환하고 앱을 강제 종료합니다.안드로이드 findViewById는 메인 액티비티 이외의 클래스에서 사용될 때 null을 반환합니다.

누구나 findViewById가 내 기본 활동에서 작동하지만 리스너 클래스에서 작동하지 않는 이유를 알고 계십니까?

다음은 내 주요 활동 코드입니다. 텍스트 뷰 TV = view.findViewById (R.id "나는 얻기 위해 어떻게해야합니까 무엇

public class MyOnItemSelectedListener implements OnItemSelectedListener 
{ 

    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
    {    
     TextView tv = view.findViewById(R.id.myTextView); 
     // I want to set the text of this text view to the value selected using the spinner 
     tv.setText("Something"); 
    } 

    public void onNothingSelected(AdapterView parent) { 
     // Do nothing. 
    } 
} 

:

public void something() 
{ 
    setContentView(R.layout.spinnerLayout); 

    Spinner spinner = (Spinner) findViewById(R.id.mySpinner); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
      this, R.array.spinner_array, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); 

} 

을 그리고 여기 MyOnItemSelectedListener 코드입니다 : 그것은 단추를 클릭 할 때 호출되는 .myTextView); " 일하다?

감사합니다 !!! 당신은 콘텐츠보기를 설정하는 경우 이전

답변

7

? Activity을 확장 할 때 setContentView(R.id.textview1)이 필요한 onCreate 메서드가 있어야합니다.

+1

내 주요 활동에서 이미 setContentView (R.layout.somename)를 호출했습니다. 그런 다음 레이아웃에서 회 전자를 표시하고 목록에서 항목을 선택하면 findViewById를 사용하여 TextView를 업데이트해야합니다. – Bumper

+0

죄송합니다. 제 앞에 코드가 없기 때문에 "somename"을 넣었지만 회 전자가있는 레이아웃으로 내용보기를 설정합니다. – Bumper

+0

진단을 제공 할 수 있도록 전체 코드를 붙여 넣으십시오. – Cristian

1

setContentView라고해야합니다 작업 findViewById 위해서는

+0

view.findViewById()를 작동시키지 못해서 리스너 클래스 extends Activity 만 만들었습니다.나는 여기에서 활동을 확장해야할지 모르겠다. – Bumper

1

당신은 다른 글에서 언급 한 바와 같이 setContentView 당신이 텍스트 뷰 찾을에서보기를 지정해야 할 수있는 경우 : (내 주요 활동에서

TextView tv = (TextView)view.findViewById (R.id.textView1); 
+0

죄송합니다. 내 게시물에 캐스팅을 넣는 것을 잊었지만 실제 코드에 있습니다. 방금 내 게시물에 추가했습니다. – Bumper

0

내가 findViewById를 호출 할 수 있습니다를 R.id을 . 텍스트보기 1) 그것은 잘 작동합니다. 그러나 내 스피너 리스너 클래스에서 동일한 함수를 호출하면 항상 null을 반환하고 앱을 강제 종료합니다.

내가 너무 안드로이드에 새로운 오전, 나는 잘못 될 수도 있지만 내가 생각하고 몇 가지가 있습니다

  1. 왜 리스너가 활동을 확장을?
  2. 다시 findByView를 호출하면 올바른 ID를 찾으려면 안드로이드가 다시 트리로 이동해야합니다. 필드 변수에서 찾은 텍스트 뷰를 저장하면
  3. 이 실제로 활동하는 경우 올바르게 입력 했습니까? 당신의 주된 활동을 시작할 의도?
  4. 해당 활동을 manifest.xml에 추가 했습니까?
  5. ... 다른 사람들이 이미 말했듯이 잘못된 상황 일 수 있습니다.

더 많은 코드 스 니펫이 좋습니다. nyyrikki

관련 문제