Android 视图在片段中为空

Android 视图在片段中为空,android,android-fragments,Android,Android Fragments,在我的一项活动中,ViewPager中有许多片段。这些碎片上有文字。我的目标是在活动中发生事件时更新片段上的文本 我试过一些东西,但似乎找不到一个合作的视角。在下面的代码中,我尝试将视图从onCreateView保存到私有字段。这在创建片段时可以成功地工作,但是当我尝试调用refreshmymView时,它是空的 private View mView = null; @Override public View onCreateView(LayoutInflater in

在我的一项活动中,
ViewPager
中有许多片段。这些碎片上有文字。我的目标是在活动中发生事件时更新片段上的文本

我试过一些东西,但似乎找不到一个合作的视角。在下面的代码中,我尝试将视图从
onCreateView
保存到私有字段。这在创建片段时可以成功地工作,但是当我尝试调用
refresh
my
mView
时,它是空的

    private View mView = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (container == null) { return null; }         
        View view = inflater.inflate(R.layout.view_account_general, container, false);
        mView = view;
        setContent();
        return view;
    }

    private void setContent() {
        if (mView == null) return;
        ((TextView) mView.findViewById(R.id.mId)).setText("Hello");
    }

    @Override
    public void refresh() {
        ((TextView) mView.findViewById(R.id.mId)).setText("Test");
    }
刷新
在接口中实现。我的
ViewPager
有两个不同的片段,所以我实现了接口,允许我投射一个未知片段来调用refresh

我试着写下面的代码来最好地说明我的问题。我可以将文本设置为“Hello”,但在刷新时,活动将崩溃,因为
mView
为空

    private View mView = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (container == null) { return null; }         
        View view = inflater.inflate(R.layout.view_account_general, container, false);
        mView = view;
        setContent();
        return view;
    }

    private void setContent() {
        if (mView == null) return;
        ((TextView) mView.findViewById(R.id.mId)).setText("Hello");
    }

    @Override
    public void refresh() {
        ((TextView) mView.findViewById(R.id.mId)).setText("Test");
    }
我做错了什么?我应该做什么?片段对我来说是非常新的,我已经很久没有为Android编程了。我唯一的目的是在调用
refresh
方法时更新我的
TextView
的值

谢谢你在我的问题上帮助我

编辑: 根据请求,异常跟踪

FATAL EXCEPTION: main
java.lang.NullPointerException
    at com.jordanmoore.finances.AccountGeneralFragment.refresh(AccountGeneralFragment.java:85)
    at com.jordanmoore.finances.AccountActivity.onOptionsItemSelected(AccountActivity.java:222)
    at android.app.Activity.onMenuItemSelected(Activity.java:2534)
    at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:361)
    at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:964)
    at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
    at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
    at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:156)
    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1090)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2863)
    at android.widget.AbsListView$1.run(AbsListView.java:3538)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:213)
    at android.app.ActivityThread.main(ActivityThread.java:4786)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
    at dalvik.system.NativeStart.main(Native Method)

底线-一个片段应该控制刷新它自己的视图。活动不应该在片段中调用“refresh”方法,这仅仅是因为确定片段何时初始化并准备好呈现非常痛苦且容易出错


在您的情况下,您的活动可以广播一个“更新”,您的片段将注册接收该更新。只要您确保在满足先决条件后注册,并在先决条件无效之前取消注册,一切都会正常进行。e、 例如,遵循在
onResume()
中注册,在
onPause()
中注销的典型模式,在哪个活动/片段生命周期的方法中调用
refresh
方法?我真的不明白你想要什么。我发誓我已经读了你的问题三遍了。要么我的思维被锁住,要么你必须理解。哈哈哈,没关系。。。我想说的是:调用
refresh
方法的代码在哪里?:)对不起,我会尽量解释清楚的。我的活动中有一个ViewPager,其中有一些片段。碎片上有一些文字。当我的活动中发生某些事件时,我想更改片段上的文本。正在从我的活动中成功调用我的
refresh
方法。出于调试目的,它循环遍历适配器中的每个片段,并对其调用refresh方法。当前,当我按下菜单项时,此代码正在运行,因此在我的活动的
onoptionItemSelected
中。您也可以粘贴异常堆栈跟踪吗?这将有助于找出问题谢谢,我能够使用本地广播,现在可以在我的活动中发生事件时成功地更新我的文本。对于将来阅读本文的任何人,本网站提供了一个关于如何设置本地广播的好例子(但在片段中注册接收到的内容时,必须使用
this.getActivity()
而不是
this
。无论如何,本网站: