工具栏标题在Android中不会更改

问题描述 投票:1回答:5

我试图在Android中设置工具栏的标题,但应用程序崩溃(空指针异常)。我尝试了很多stackoverflow相同的问题,但似乎没有一个对我有用。我使用下面的代码

toolbar = (Toolbar) findViewById(R.id.toolBarDataProvider);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Notice");

logcat的

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference at com.akapoor.kiittimetabletest1.Notice.onCreate(Notice.java:31)

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.akapoor.kiittimetabletest1.Notice">

<include
    android:id="@+id/include"
    layout="@layout/toolbar_data_provider"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<LinearLayout
    android:layout_margin="10dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="10">

    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="9">

        <TextView
            android:id="@+id/tvServerText"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="25dp"
            android:textColor="#000000"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    </ScrollView>

    <Button
        android:id="@+id/bServer"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="Refresh" />
</LinearLayout>

toolbar_data_provider.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar     xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolBarDataProvider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

</android.support.v7.widget.Toolbar>
android android-toolbar
5个回答
0
投票

所以你没有Toolbar ...也许告诉我们你的代码为这个Activity的样式或xml布局

编辑:当你使用时,也许有一些id覆盖

<include
    android:id="@+id/include"

这是你的Toolbar的新id(包含在分隔文件中的第一个视图)。尝试使用merge(包装整个Toolbar)或者只是不要在include中设置新的id

更多HERE


0
投票

实际上,您没有将工具栏设置为SupportActionctionBar,因为您已将其包含在内。要访问包含的布局,您需要:

1)获得包含的布局:

View icludedLayout = findViewById(R.id.include);

2)从中获取工具栏:

View toolbar = findViewById(R.id.toolBarDataProvider);

编辑

如果您没有误解,并且您的tollbar xml文件被命名为Toolbar.xml,则需要将include标记更改为:

<include
    android:id="@+id/include"
    layout="@layout/Toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

0
投票

您必须为layout属性设置xml文件名(在您的情况下,xml文件名为Toolbar

EDITED

替换这个:

<include
    android:id="@+id/include"
    layout="@layout/toolbar_data_provider"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

使用以下代码(在此代码中,我将include标记的id设置为toolBarDataProvider而不是include):

<include
    android:id="@+id/toolBarDataProvider"
    layout="@layout/Toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

并且Toolbar.XML文件应包含以下代码(不需要toolbar id属性):

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar     xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

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

0
投票

虽然setSupportActionBar传递null参数。因此,工具栏为空。通过这种方式,我们可以得出结论,findViewById找不到具有id toolbarDataProvider的视图。我建议你需要检查你身份证的有效性。或者提供有关xml的信息。

EDITED

所以,正如我所说,你没有id toolbarDataProvider。当您使用include标签时导入其他xml中描述的视图,但您可以覆盖它的属性。在您的情况下,您从toolbarDataProvider覆盖id属性以包含。尝试更改代码以查看其是否正常工作:

toolbar = (Toolbar) findViewById(R.id.include);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Notice");

0
投票

这是一个非常非常晚的答案,但对于仍然在这个问题上寻求帮助的人...给你的工具栏分配include的id。这对我有用,也一定要将样式中的工具栏设置为NoActionBar。

toolbar = (Toolbar) findViewById(R.id.include);

推荐问答