从片段更改活动工具栏标题

时间:2018-03-17 17:15:20

标签: java android android-fragments nullpointerexception

我无法解决这个简单的问题 我有主要活动,它有一个工具栏和一个片段。

主要活动xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.dimfcompany.macapp2.MainActivity">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolBarTest"
        android:titleTextColor="@color/macYellow"
        android:title="dsfsdf"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@color/macRed">


    </android.support.v7.widget.Toolbar>

    <fragment
        android:id="@+id/testfrag"
        android:name="com.dimfcompany.macapp2.fragtest1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></fragment>

</LinearLayout>

MainActivity Java

public class MainActivity extends AppCompatActivity {

Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar=(Toolbar)findViewById(R.id.toolBarTest);
    toolbar.setTitle("BLDFLDSF");
}

public void setToolBarText(String text)
{
    toolbar.setTitle("dsfsdfsdf");
}
}

在MainActivity.java onCreateMethod中设置标题有效 然后,如果片段内容发生变化,我希望我的标题会发生变化 在我的片段中,我有onViewCreated()方法,我正在尝试从此方法更改标题。

public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
{
    ((MainActivity)getActivity()).setToolBarText("FragmentTitle");

    toolbar=(Toolbar) view.findViewById(R.id.toolBarTest);
    toolbar.setTitle("FragmentTitle");
}

我尝试直接更改它并使用MainActivity中的调用方法setToolBarText进行更改。

我总是有例外

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.Toolbar.setTitle(java.lang.CharSequence)' on a null object reference

我做错了什么?

1 个答案:

答案 0 :(得分:1)

除非您使用android:id="@+id/toolBarTest"在Fragment中加载XML视图,否则第一行将返回空视图,第二行将引发错误。

toolbar=(Toolbar) view.findViewById(R.id.toolBarTest);
toolbar.setTitle("FragmentTitle");

您已经尝试使用Activity方法设置标题,因此不需要这些