我无法解决这个简单的问题 我有主要活动,它有一个工具栏和一个片段。
主要活动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
我做错了什么?
答案 0 :(得分:1)
除非您使用android:id="@+id/toolBarTest"
在Fragment中加载XML视图,否则第一行将返回空视图,第二行将引发错误。
toolbar=(Toolbar) view.findViewById(R.id.toolBarTest);
toolbar.setTitle("FragmentTitle");
您已经尝试使用Activity方法设置标题,因此不需要这些