Java findViewById()返回null
我目前是Android开发新手,遇到了一个以前的研究无法帮助我解决的问题。我在Android活动中使用findViewById()来获取在活动对应的xml片段文件中声明的TextView对象,如下所示:Java findViewById()返回null,java,android,Java,Android,我目前是Android开发新手,遇到了一个以前的研究无法帮助我解决的问题。我在Android活动中使用findViewById()来获取在活动对应的xml片段文件中声明的TextView对象,如下所示: public void scanLocalApk() { //get the list of apks in the default downloads directory ArrayList<File> foundAPKs = findApksInDownloadD
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);
}
片段布局xml中的视图正在膨胀到片段的视图层次结构中,在调用
onCreate()
回调之前,该视图不会添加到活动的层次结构中,因此活动上下文中的findViewById()
将在调用onCreate()
时为这些视图返回null
如果希望将视图保留在片段中,最好对从片段中的onCreateView()
方法返回的视图调用findViewById()
,并将视图的功能和引用移动到片段中
如果不想/不需要使用片段,可以将
fragment\u scan\u local\u apk.xml
中的视图移动到activity\u scan\u local\u apk.xml
,并保持代码的其余部分不变。如果您决定使用此选项,则可以删除占位符片段的代码片段布局xml中的视图将膨胀到片段的视图层次结构中,在onAttach()
回调之前,该视图不会添加到活动的层次结构中,因此findViewById()
在调用onCreate()
时,活动上下文中的这些视图将返回null
如果希望将视图保留在片段中,最好对从片段中的onCreateView()
方法返回的视图调用findViewById()
,并将视图的功能和引用移动到片段中
如果不想/不需要使用片段,可以将fragment\u scan\u local\u apk.xml
中的视图移动到activity\u scan\u local\u apk.xml
,并保持代码的其余部分不变。如果您决定使用此选项,则可以删除占位符片段的代码
是否可以在调用方法setContentView
的地方提供代码。感谢您的关注。啊,这很有意义,但是我如何从片段的视图层次结构中找到视图呢?或者我应该将组件定义从片段的xml文件移动到活动的xml文件中吗?您可以提供调用方法setContentView
”的代码吗。感谢您的关注。啊,这很有意义,但是我如何从片段的视图层次结构中找到视图呢?或者我应该将组件定义从片段的xml文件移动到活动的xml文件吗?你是最好的,伙计。我将组件定义移动到活动xml文件中,现在运行得很好。谢谢你的帮助,你是最棒的。我将组件定义移动到活动xml文件中,现在运行得很好。谢谢你的帮助。
<TextView android:id="@+id/display_apks"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
@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();
}