这似乎是一个常见的问题,但是经过数小时尝试提供作为类似问题答案的随机解决方案后,当我从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了解详细信息

10-06 06:08