Java findViewById()返回null

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

我目前是Android开发新手,遇到了一个以前的研究无法帮助我解决的问题。我在Android活动中使用findViewById()来获取在活动对应的xml片段文件中声明的TextView对象,如下所示:

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();
}