2014-04-13 5 views
0

저는 현재 Android 개발을 처음 사용하고 있으며 이전 연구에서 해결을 돕지 못하는 문제가 발생했습니다. 그래서 같은 활동의 해당 XML 조각 파일에 선언 된 텍스트 뷰 객체를 잡기 위해 안드로이드 활동에 같이 findViewById()를 사용하고 있습니다 :findViewById() null을 반환합니다.

public void scanLocalApk() { 
    //get the list of apks in the default downloads directory 
    ArrayList<File> foundAPKs = findApksInDownloadDirectory(); 
    //display the list of found apks 
    String apkListString = ""; 
    if (foundAPKs != null) 
     for (File f : foundAPKs) 
      apkListString += (f.getName() + "\n"); 
    TextView displayApksTextView = (TextView) findViewById(R.id.display_apks); 
    displayApksTextView.setText(apkListString); 
    TextView apkToInstallTextView = (TextView) findViewById(R.id.label_apk_to_install); 
    apkToInstallTextView.setVisibility(View.VISIBLE); 
    EditText apkToInstallEditText = (EditText) findViewById(R.id.apk_to_install); 
    apkToInstallEditText.setVisibility(View.VISIBLE); 
} 

NullPointerException이이 줄에서 발생되는 : displayApksTextView.setText (apkListString) ; 위 행의 findViewById 호출이 null을 반환하기 때문에.

자원 "display_apks"

여기에 "fragment_scan_local_apk.xml"에 정의되어 있습니다 : 웹 주위

<TextView android:id="@+id/display_apks" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

이전에 언급 한 솔루션 (즉 된 setContentView을 보장하기 위해 말했다) findViewById를() 이상이라고하지만, 내 그것이 코드입니다.

누구에게 어떤 문제가있을 수 있습니까?

편집 : 요청에 따라, 내가 된 setContentView()를 호출 여기

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_scan_local_apk); 

    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 
    } 

    //branch to a logic method 
    scanLocalApk(); 
} 
+0

당신은'setContentView' 메소드를 호출하는 코드를 제공 할 수 있습니까? – Zyn

+0

수정 됨. 봐 주셔서 감사합니다. – MawrCoffeePls

+0

아, 그건 이해가되지만, 그럼 어떻게 프래그먼트의 뷰 계층 구조에서 뷰를 찾을 수 있습니까? 또는 부분의 XML 파일에서 구성 요소 정의를 활동의 XML 파일로 이동해야합니까? – MawrCoffeePls

답변

5

당신의 조각의 레이아웃 XML의 조회수가 될 때까지 활동의 계층 구조에 추가되지 않습니다 조각의보기 계층 구조로 팽창되고있다 onAttach() 콜백이므로 onCreate()이 호출 될 때 Activity의 컨텍스트에서 findViewById()은 해당 뷰에 대해 null을 반환합니다.

조각을 뷰에 보관하려면 조각에서 onCreateView() 메서드에서 반환 된보기에서 findViewById()을 호출하고보기의 기능과 참조를 조각으로 이동하는 것이 좋습니다.

조각을 사용하고 싶지 않거나 사용하지 않으려면 fragment_scan_local_apk.xml의보기를 activity_scan_local_apk.xml으로 옮기고 나머지 코드는 그대로 유지하십시오. 이 옵션을 사용하기로 결정한 경우 PlaceholderFragment의 코드를 삭제할 수 있습니다.

+0

당신은 최고입니다. 구성 요소 정의를 activity xml 파일로 옮겼습니다. 이제는 완벽하게 실행됩니다. 도와 주셔서 감사합니다. – MawrCoffeePls

관련 문제