我有一個應用程序,目前在Android版本4.x和更多。 我想改變它,以便可以使用較舊的設備,如2.x和更多。 除了操作欄之外,一切正常。每次我嘗試getSupportActionBar時,我都會收到一個空指針異常。這是在論壇上討論過的很多問題,但我仍然無法解決。Android - 在較老的設備上使用AppCompat/ActionBar(java.lang.NullPointerException)
該應用程序使用appCompat庫,但它似乎不適用於較舊的設備。
styles.xml文件
<style name="AppBaseTheme" parent="Theme.MyApp">
<item name="android:spinnerItemStyle">@style/SpinnerItem</item>
<item name="android:spinnerDropDownItemStyle">@style/SpinnerItem.DropDownItem</item>
<item name="android:windowNoTitle">true</item>
</style>
MyApp.xml文件
<style name="Theme.MyApp" parent="@style/Theme.AppCompat">
<item name="actionBarItemBackground">@drawable/selectable_background</item>
<item name="popupMenuStyle">@style/PopupMenu.MyApp</item>
<item name="dropDownListViewStyle">@style/DropDownListView.MyApp</item>
<item name="actionBarTabStyle">@style/ActionBarTabStyle.MyApp</item>
<item name="actionDropDownStyle">@style/DropDownNav.MyApp</item>
<item name="actionBarStyle">@style/ActionBar.Transparent.MyApp</item>
<item name="actionModeBackground">@drawable/cab_background_top</item>
<item name="actionModeSplitBackground">@drawable/cab_background_bottom</item>
<item name="actionModeCloseButtonStyle">@style/ActionButton.CloseMode.MyApp</item>
活動試圖讓動作條
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auction_list);
if (android.os.Build.VERSION.SDK_INT >=11)
{
getActionBar().setIcon(R.drawable.gem);
getActionBar().setDisplayHomeAsUpEnabled(false);
this.getActionBar().setDisplayShowCustomEnabled(true);
this.getActionBar().setDisplayShowTitleEnabled(false);
LayoutInflater inflator = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflator.inflate(R.layout.actionbar_title, null);
((CFTextView)v.findViewById(R.id.actionbarTitle)).setText(this.getTitle());
//assign the view to the actionbar
this.getActionBar().setCustomView(v);
}
else
{
//This calls a private class inside the same class to get a supported action bar
notActionBar nab = new notActionBar();
nab.getNotActionBar(); //THIS IS THE ERROR LINE
}
私有類是可以獲得支持的行爲離子棒。我使用了私有類而不是直接獲取操作欄,因爲我無法擴展ActionBarActivity,因爲活動全部就緒擴展了片段。
private class notActionBar extends ActionBarActivity {
public void getNotActionBar(){
ActionBar actionBar = getSupportActionBar(); //NULL POINTER EXCEPTION
actionBar.setIcon(R.drawable.gem);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setDisplayShowCustomEnabled(true);
this.getSupportActionBar().setDisplayShowCustomEnabled(true);
this.getSupportActionBar().setDisplayShowTitleEnabled(false);
LayoutInflater inflator = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflator.inflate(R.layout.actionbar_title, null);
((CFTextView)v.findViewById(R.id.actionbarTitle)).setText(this.getTitle());
//assign the view to the actionbar
this.getSupportActionBar().setCustomView(v);
}
public void setTitleActionBar(String a){
getSupportActionBar().setTitle(a);
}
}
非常感謝。因爲我認爲Action bar活動沒有擴展Fragments,所以我在做內部類的所有工作。它工作正常,現在我正在從oncreate方法獲取操作欄。 – user3328051
酷!我很高興,這對你有效:-) – donfuxx