我目前還不熟悉Android開發,並遇到以前的研究無法幫助我解決的問題。我在Android活動使用findViewById()搶在活動的相應的XML片段文件中聲明,像這樣一個TextView對象: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();
}
你可以在你調用setContentView方法的地方提供代碼嗎? – Zyn
已修改。謝謝參觀。 – MawrCoffeePls
啊,這確實有道理,但是我怎樣才能從片段的視圖層次中找到一個視圖?或者我應該將組件定義從片段的xml文件移動到活動的xml文件中? – MawrCoffeePls