在活动中访问片段的文本视图时发生java NullPointerException
这似乎是一个常见问题,但在尝试了几个小时作为类似问题的答案提供的随机解决方案后,当我从活动访问片段的textView时,我的代码仍然会产生NullPointerException
当片段的textView有预定义的文本时,我可以包含(并查看)我的片段,或者在片段类的onCreateView()
中使用setText()
,但不能使用setter方法(这里是set_message_success()
)
这是我的片段类Fragment_Message
:
public class Fragment_Message extends Fragment {
TextView textview_message;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_messagebox, container, false);
textview_message = (TextView) view.findViewById(R.id.fragment_textview_message);
textview_message.setText("test");
return view;
}
public void set_message_success(String text) {
textview_message.setText(text);
}
}
以及活动课程中的相关行:
FragmentManager frag_manager = getFragmentManager();
FragmentTransaction transaction = frag_manager.beginTransaction();
Fragment_Message fragment = new Fragment_Message();
fragment.set_message_success(message_green);
transaction.add(R.id.home_fragment_container, fragment, "Fragment");
transaction.commit();
home_fragment_container
是我主要活动中的一个相对人。xml,fragment_textview_message
是fragment_messagebox中的文本视图。xml,只是想让你知道,这些是什么
NullPointerException是在^{
# 1 楼答案
您正在创建一个片段,但未执行创建周期。 这一行:
不会自动调用
onCreateView
,因此您的文本视图未初始化(即null
),当您尝试使用以下行设置其文本时:由于文本视图成员未初始化,因此会出现异常,因此可以在构造函数中初始化文本视图,或者在所需布局中定义片段
有关详细信息,请查看here
# 2 楼答案
问题显然是碎片的生命周期。当我添加一个片段(在活动的
onCreate()
中完成)并在片段的onCreateView()
中定义它的文本视图文本时,片段将毫无问题地显示出来。但是在活动的onCreate()
中访问片段的文本视图失败,因为——我猜——片段还没有连接因此,我在活动的
onCreate()
中添加了片段,并在活动的onResume()
中更改了片段的文本视图文本,按照我的理解,应该将片段附加到其中。此外,使用executePendingTransactions()
也有帮助。我现在的工作代码:回家。爪哇
片段信息。爪哇