【问题标题】:How to set value of a TextView in Fragment?如何在 Fragment 中设置 TextView 的值?
【发布时间】:2019-03-05 03:13:43
【问题描述】:

我在我的动态应用程序中使用片段,其中 User.java 文件包含值,TabbedActivity.java 文件包含三个片段。我想在ProfileFrgament.java 中将文本设置为TextView。因此,我在fragment_profile.xml 中创建了一个TextView,并使用以下代码从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);
}

【问题讨论】:

  • 没错,您的 textview 在 fragment_profile.xml 中可用,并且您在 TabbedActivity.java 中找到该 textview 并设置,因此发生了 NullpointerException。
  • @ChiragSavsani 那么,解决方案是什么?

标签: android android-fragments textview


【解决方案1】:

您的TextViewfragment_profile.xml 中,而您试图在TabbedActivity.java 中找到TextView,因此出现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;
}

【讨论】:

  • 它在User user = SharedPrefManager.getInstance(this).getUser(); 行显示错误,说 sharedPrefManager 中的getInstance() 不能应用于 ProfileFragment
  • 用 getActivity() 替换它
  • 现在将name = getActivity().findViewById(R.id.name); 显示为无法访问的语句
  • unreachable statement 因为您在返回后编写了该代码。
  • 现在,没有编译错误,但应用程序仍然停止并显示 logcat java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at net.softglobe.arsoddynamic.ProfileFragment.onCreateView(ProfileFragment.java:30)
【解决方案2】:

您需要在片段的 java 文件中执行此操作,而不是在活动的 java 文件中执行此操作。 现在在片段中查找视图。 替换此代码:

name = findViewById(R.id.name);

到:

name = getActivity().findViewById(R.id.name);

其余代码可以照原样编写。

同样把这种类型的操作放在onViewCreated方法中。将此代码放入onCreateView 可能会使应用程序崩溃。

【讨论】:

  • setText() 行现在显示为 unreachable statement
  • 请用您编写的新代码更新问题。
  • 我用ProfileFragment.java的代码更新了问题
  • 将该代码放入onViewCreated 方法中。除了膨胀 fragment 布局之外,不要在 onCreateView 中做任何事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多