这似乎是一个常见的问题,但是经过数小时尝试提供作为类似问题答案的随机解决方案后,当我从Activity中访问Fragment的textView时,我的代码仍会产生NullPointerException。
当它的textView具有预定义的Text时,可以包括(并查看)我的Fragment;或者,可以在Fragment类的setText()
中使用onCreateView()
,但不能使用setter方法(此处为set_message_success()
)。
这是我的Fragment类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);
}
}
以及来自Activity类的相关行:
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
是我的main_activity.xml中的RelativeLayout,fragment_textview_message
是fragment_messagebox.xml中的textView,只是让您知道它们是什么。NullPointerException是在
set_message_success()
中引起的。有任何想法吗? 最佳答案
您正在创建片段,但是创建周期未执行。
这行:
Fragment_Message fragment = new Fragment_Message();
不会自动调用
onCreateView
,因此您的文本视图未初始化(是null
),并且在尝试使用以下行设置其文本时未初始化:fragment.set_message_success(message_green);
由于未初始化文本视图成员,因此您将获得异常,因此可以在构造函数中初始化文本视图或在所需布局中定义片段。
查看here了解详细信息