2016-05-31 109 views
0

在我的Android應用程序中,我使用自定義工具欄,並且findViewById()似乎無法找到工具欄。Android的findViewById爲工具欄返回null

我環顧了這個互聯網的所有類似問題,並沒有一個人似乎能夠工作。

我的屏幕總是返回吐司 「工具欄失敗...」

這裏是我的Java onCreate()

protected Toolbar toolbar; 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
     toolbar = (Toolbar) findViewById(R.id.tool_bar); 
     if(toolbar != null) { 
      setSupportActionBar(toolbar); 
     } else { 
      Toast.makeText(Home.this, "Toolbar failed...", Toast.LENGTH_SHORT).show(); 
      Toast.makeText(Home.this,"", Toast.LENGTH_SHORT).show(); 
     } 
     if (savedInstanceState == null) { 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new PlaceholderFragment()).commit(); 
     } 
     Intent intent = getIntent(); 
     String action = intent.getAction(); 
     String type = intent.getType(); 

     if (Intent.ACTION_SEND.equals(action) && type != null) { 
      if ("text/plain".equals(type)) { 
       handleSendText(intent); // Handle text being sent 
      } 
     } 

    } 

這裏的XML佈局文件:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 


    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true"> 

     <android.support.v7.widget.Toolbar 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/colorPrimary" 
      android:elevation="4dp" 
      android:id="@+id/tool_bar"/> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/home" 
      android:layout_below="@id/tool_bar" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" /> 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Your Scripture:" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:layout_below="@+id/textView2" 
      android:layout_alignParentLeft="true" /> 

    <TextView 
     android:id="@+id/scripturecontainer" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="You have not selected a scripture yet..." 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:layout_below="@+id/textView1" 
     android:layout_alignParentLeft="true" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="trywidget" 
     android:text="Try the Widget" 
     android:layout_below="@+id/scripturecontainer" 
     android:layout_alignParentLeft="true" /> 

    <Button 
     android:id="@+id/widget_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="change" 
     android:text="Select A Scripture" 
     android:layout_below="@+id/button2" 
     android:layout_alignParentLeft="true" /> 

    <Button 
     android:id="@+id/button3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="suggest" 
     android:text="Suggest A Feature" 
     android:layout_below="@+id/widget_button" 
     android:layout_alignParentLeft="true" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="wallpaper" 
     android:text="Change the Wallpaper" 
     android:layout_below="@+id/button3" 
     android:layout_alignParentLeft="true" /> 
    </RelativeLayout> 
    <ListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 

</android.support.v4.widget.DrawerLayout> 

這是我的風格的XML file:

<resources> 

    <!-- 
     Base application theme, dependent on API level. This theme is replaced 
     by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 
    --> 
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <!-- 
      Theme customizations available in newer API levels can go in 
      res/values-vXX/styles.xml, while customizations related to 
      backward-compatibility can go here. 
     --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
     <item name="windowNoTitle">true</item> 
     <item name="windowActionBar">false</item> 
    </style> 

    <!-- Application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
    </style> 

</resources> 
+0

這並不似乎是你設置爲'Activity'佈局,因爲它不」沒有一個'ViewGroup',ID爲'container',而且'FragmentTransaction'在第一次運行時會導致崩潰。 –

+0

它不會崩潰。只是返回一個null。 –

+0

我不知道你的意思是「返回null」,但是如果當前佈局沒有'container',那麼'FragmentTransaction'會崩潰。鑑於此,''findViewById()'爲'Toolbar'返回'null'的事實,我會說你發佈的佈局不是'activity_home'。 –

回答

1
<android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

使用上面的代碼申報的工具欄在你的XML和改變

android:theme="your_theme" 
+0

這只是返回一個異常,說它無法找到視圖android.support.design.widget.AppBarLayout。 –

+0

@ sub6resources然後你在你的build.gradle中缺少'compile「com.android.support:design:23.2.1」' –