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

时间:2016-07-06 15:37:52

标签: android android-toolbar

我正在尝试在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>

5 个答案:

答案 0 :(得分:0)

所以你没有 List<string> colour = new List<String>{ "Red", "Orange", "Blue" }; List<string> enumColors = Enum.GetNames(typeof(MyColours)).ToList(); foreach (string s in enumColors) { if (colour.Exists(e => e == s)) return true; else return false; } ...也许会向我们展示你的Toolbar

的样式或xml布局代码

编辑: 当你使用

时,可能会有一些id覆盖
Activity

这是您<include android:id="@+id/include" 的新ID(包含在分隔文件中的第一个视图)。尝试使用Toolbar(换行整个merge)或者只是不要在include

中设置新的id

更多HERE

答案 1 :(得分:0)

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

<强> EDITED

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

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

答案 2 :(得分: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" />

答案 3 :(得分: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>

答案 4 :(得分:0)

这是一个非常晚的答案,但对于仍在此问题上寻求帮助的任何人...为您的工具栏分配ID include。这对我有用,还请确保将样式的工具栏设置为NoActionBar。

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