2015-04-27 38 views
-1

我已經制定了一個通用佈局,在每個活動中包含V7工具欄,並且它的常用類文件CommonToolbar.java用於處理其屬性。包括appcompact v7工具欄錯誤

layout_common_toolbar.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar_common" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/abc_action_bar_default_height_material" 
    android:background="?attr/colorPrimaryDark"/> 

CommonToolbar.java

public class CommonToolbar { 

    Activity activity; 
    Toolbar toolbar; 

    CommonToolbar(Activity activity, View view, String title) { 
     super(); 
     this.activity = activity; 
     toolbar = (Toolbar)view.findViewById(R.id.toolbar_common); 
     toolbar.setTitle(title); 
     toolbar.setTitleTextColor(activity.getResources().getColor(R.color.white)); 
    } 

    void setNav() { 
     toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       activity.onBackPressed(); 
      } 
     }); 
    } 

    void setMenuListner() { 
     toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       switch (item.getItemId()) { 
       /* case R.id.searchItem: 
         Toast.makeText(getApplicationContext(), "Search", Toast.LENGTH_SHORT).show(); 
         break; 
        case R.id.filterItem: 
         Toast.makeText(getApplicationContext(), "Filter", Toast.LENGTH_SHORT).show(); 
        break;*/ 
       } 

       return true; 
      } 
     }); 

     toolbar.inflateMenu(R.menu.common_toolbar_menu); 
    } 
} 

使用它喜歡:

在佈局

<include android:layout_height="@dimen/abc_action_bar_default_height_material" 
       android:id="@+id/includeSurgicalDetail" 
       android:layout_width="match_parent" 
       layout="@layout/layout_common_actionbar"/> 

在活動

View includedLayout = findViewById(R.id.includeSurgicalDetail); 
CommonToolbar commonToolbar = new CommonToolbar(SurgicalDetail.this, includedLayout, pName); 
commonToolbar.setMenuListner(); 
commonToolbar.setNav(); 

,但我得到了以下錯誤:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.greyline.eswasthyaprojectv3/com.eswasthyaV3.SurgicalDetail}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.Toolbar.setTitle(java.lang.CharSequence)' on a null object reference 
+0

發佈您的活動xml – juanhl

+0

你爲什麼這麼奇怪?做一切活動,而不是其他班級,並告訴發生什麼。 – Harry

+0

爲了避免在選項菜單代碼和每一件事情上多次寫入,我認爲這種方式會更有效。如果你有其他方式,建議我... –

回答

0

如果你不想寫相同的選項菜單中的代碼,你應該extendActivity代替。

BaseActivity類,如:

public class BaseActivity extends Activity{ 
    protected Toolbar toolbar; 
    public void onCreate(Bundle savedInstaceState){ 
     super.onCreate(savedInstanceState); 

     //initialize the Toolbar, set the menu listener, nav, etc 
     toolbar = (Toolbar)findViewById(R.id.toolbar_common); 
    } 
} 

然後爲您想擁有共享代碼的所有Activity,擴展BaseActivity,而不是Activity。所以你不需要反覆編寫相同的選項菜單代碼。