如何在Fragment中设置TextView的值?

时间:2018-09-29 09:15:30

标签: android android-fragments textview

我在动态应用程序中使用片段,其中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);
}

2 个答案:

答案 0 :(得分:1)

您的TextViewfragment_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可能会使应用程序崩溃。