ActionBarSherlock getCustomView()在前ICS安卓版本上返回null

时间:2012-10-18 21:21:14

标签: android android-actionbar actionbarsherlock

我正在使用ABS库开发应用程序。在两个fragmentActivities中,我需要在Actionbar中使用自定义视图。我的代码在ICS和JB中非常完美。但我在姜饼中测试并坠毁。

我的代码是下一个:

public class SearchContactActivity extends SherlockFragmentActivity {

    private EditText searchField;
    private ImageButton searchButton;


    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.search_contacts);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        View view = actionBar.getCustomView();//ICS & JB return the View OK, lower versions returns null
        searchField = (EditText) view.findViewById(R.id.editText_search);//here the app crash because view is null
        searchButton = (ImageButton) view.findViewById(R.id.button_search);

    }
}

我的主题XML:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Styled.Search" parent="Theme.Sherlock.Light">
       <item name="actionBarStyle">@style/Widget.Styled.ActionBar.Search</item>
        <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar.Search</item>
    </style>
    <style name="Widget.Styled.ActionBar.Search" parent="Widget.Sherlock.Light.ActionBar">
        <item name="background">@drawable/bg_actionbar</item>
        <item name="android:background">@drawable/bg_actionbar</item>
        <item name="backgroundSplit">@drawable/bg_actionbar</item>
        <item name="android:backgroundSplit">@drawable/bg_actionbar</item>
        <item name="android:titleTextStyle">@style/NoTitleText</item>
        <item name="android:subtitleTextStyle">@style/NoTitleText</item>
        <item name="android:displayOptions">showHome|useLogo|showCustom</item>
        <item name="android:customNavigationLayout">@layout/custom_action</item>
    </style>
</resources>

和我的custom_view:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <EditText
        android:id="@+id/editText_search"
        style="@style/Widget.Styled.EditText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/button_search"
        android:ems="10"
        android:hint="@string/hint_search"
        android:inputType="textNoSuggestions"
        android:layout_marginRight="5dp" />

    <ImageButton
        android:id="@+id/button_search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/editText_search"
        android:layout_alignTop="@+id/editText_search"
        android:layout_alignParentRight="true"
        android:layout_marginRight="5dp"
        android:background="@drawable/button_go_login_xml"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:src="@drawable/lupa" />

</RelativeLayout>

我的logcat

10-18 18:03:34.259: E/AndroidRuntime(10576): FATAL EXCEPTION: main
10-18 18:03:34.259: E/AndroidRuntime(10576): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.co2fine.client/com.co2fine.client.SearchContactActivity}: java.lang.NullPointerException
10-18 18:03:34.259: E/AndroidRuntime(10576):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at android.os.Looper.loop(Looper.java:123)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at android.app.ActivityThread.main(ActivityThread.java:3729)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at java.lang.reflect.Method.invokeNative(Native Method)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at java.lang.reflect.Method.invoke(Method.java:507)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:632)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at dalvik.system.NativeStart.main(Native Method)
10-18 18:03:34.259: E/AndroidRuntime(10576): Caused by: java.lang.NullPointerException
10-18 18:03:34.259: E/AndroidRuntime(10576):    at com.co2fine.client.SearchContactActivity.onCreate(SearchContactActivity.java:53)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-18 18:03:34.259: E/AndroidRuntime(10576):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
10-18 18:03:34.259: E/AndroidRuntime(10576):    ... 11 more

1 个答案:

答案 0 :(得分:5)

尝试添加:

<item name="customNavigationLayout">@layout/custom_action</item>

同意:

<item name="android:customNavigationLayout">@layout/custom_action</item>