gpt4 book ai didi

java - 为什么 findViewById() 在这里不像 getActivity().findViewById() 那样工作?

转载 作者:搜寻专家 更新时间:2023-11-01 08:42:19 27 4
gpt4 key购买 nike

    /**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_detail,
container, false);
// The detail Activity called via intent. Inspect the intent for forecast data.
Intent intent=getActivity().getIntent();
TextView text=(TextView)rootView.findViewById(R.id.text1);
String b=intent.getStringExtra(Intent.EXTRA_TEXT);
text.setText(b);

return rootView;
}
}

在我使用的这段代码中

TextView text=(TextView)getActivity().findViewById(R.id.text1)

然后我的应用程序崩溃了,Logcat 说

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference

这是与此代码关联的 XML 文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.sunshine.app.DetailActivity$PlaceholderFragment" >

<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

</RelativeLayout>

最佳答案

In this code when I am using TextView text=(TextView)getActivity().findViewById(R.id.text1)

Then my app crashes and Logcat says that Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference

findViewById()Activity 上从 Root View (所谓的“装饰 View ”)开始,遍历可用小部件和容器树,寻找 ID 匹配项。因此,findViewById()调用Activity只会找到属于整个 Activity View 层次结构的 View 。

但是,您的 inflate()调用不附加膨胀RelativeLayout到 Activity View 层次结构。这是意料之中的。当附加 fragment 本身时,这些 View 将附加到 Activity View 层次结构,有时在您从 onCreateView() 返回后.结果,当您调用 findViewById()关于 Activity 来自内部onCreateView() ,它找不到你的 TextView ,因为那 TextView仅由 fragment 管理,还不是 Activity View 层次结构的一部分。

findViewById()View 上或 ViewGroupView开始或 ViewGroup并遍历可用小部件和容器树,寻找 ID 匹配项。 RelativeLayout可以访问您的 TextView , 所以当你调用 findViewById()RelativeLayout 上只要你充气,它就会起作用。

关于java - 为什么 findViewById() 在这里不像 getActivity().findViewById() 那样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31303877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com