我在动态应用程序中使用片段,其中User.java文件包含值,而TabbedActivity.java
文件包含三个片段。我想在TextView
中将文本设置为ProfileFrgament.java
。因此,我在TextView
中创建了一个fragment_profile.xml
,并使用以下代码从TabbedActivity.java
文件中引用了它
name = findViewById(R.id.name);
//getting the current user
User user = SharedPrefManager.getInstance(this).getUser();
//setting values to textviews
name.setText(user.getUsername());
它没有显示任何编译错误,但是在打开TabbedActivity.java
之后,应用程序在行name.setText(user.getUsername());
处以NullPointerException停止了。
这是ProfileFragment.java
文件的代码
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
name = getActivity().findViewById(R.id.name);
//getting the current user
User user = SharedPrefManager.getInstance(getActivity()).getUser();
//setting values to textviews
name.setText(user.getUsername());
return inflater.inflate(R.layout.fragment_profile, container, false);
}
答案 0 :(得分:1)
您的TextView
在fragment_profile.xml
中,而您试图在TextView
中找到TabbedActivity.java
,因此发生了NullPointerException
将此代码放入ProfileFrgament.java
通过此代码更改代码
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState)
{
final View rootView = inflater.inflate(R.layout.fragment_profile, container, false);
name = (TextView) rootView.findViewById(R.id.name);
User user = SharedPrefManager.getInstance(getActivity()).getUser();
name.setText(user.getUsername());
return rootView;
}
答案 1 :(得分:0)
您需要在片段的Java文件中执行此操作,而不是在活动的Java文件中执行此操作。 现在用于查找片段中的视图。 替换此代码:
name = findViewById(R.id.name);
至:
name = getActivity().findViewById(R.id.name);
可以直接编写其余代码。
也将这种类型的操作放入onViewCreated
方法中。将此代码放入onCreateView
可能会使应用程序崩溃。