从片段在我的工具栏上设置字幕

时间:2014-11-12 06:19:29

标签: android android-fragments android-actionbar android-appcompat android-toolbar

我在片段中设置工具栏中的子标题时遇到了一些问题。我一直在setSubTitle得到一个空指针异常。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    getActivity().getActionBar().setSubtitle("About"); // NULL POINTER EXCEPTION here
}

将工具栏添加到主机活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    if (toolbar != null) {
        Log.w("Rakshak", "Toolbar is not null");

        setSupportActionBar(toolbar);
    }
}

我的style.xml

 <style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">#1A7E99</item>
    <item name="colorPrimaryDark">#16657A</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>        
</style>

这是Logcat:

11-12 11:24:15.580: E/AndroidRuntime(22183): FATAL EXCEPTION: main
11-12 11:24:15.580: E/AndroidRuntime(22183): java.lang.NullPointerException
11-12 11:24:15.580: E/AndroidRuntime(22183):    at com.driverdesignstudio.drvr.About.onActivityCreated(About.java:63)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at android.app.Fragment.performActivityCreated(Fragment.java:1703)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at android.app.BackStackRecord.run(BackStackRecord.java:694)
11-12 11:24:15.580: E/Androidenter code hereRuntime(22183):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at android.os.Handler.handleCallback(Handler.java:800)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at android.os.Handler.dispatchMessage(Handler.java:100)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at android.os.Looper.loop(Looper.java:194)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at android.app.ActivityThread.main(ActivityThread.java:5371)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at java.lang.reflect.Method.invokeNative(Native Method)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at java.lang.reflect.Method.invoke(Method.java:525)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
11-12 11:24:15.580: E/AndroidRuntime(22183):    at dalvik.system.NativeStart.main(Native Method)

我是否必须创建接口侦听器并在片段活动中监听片段的开始和停止以设置字幕,或者是否有更简单的方法从我的片段中设置工具栏中的字幕。

如果您需要查看我的更多代码,请告诉我。

干杯。

5 个答案:

答案 0 :(得分:41)

要使用工具栏和Appcompat 21,您必须使用AppCompatActivity并使用:

((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle("About");

答案 1 :(得分:0)

而不是调用getActivity()从Fragment的onAttach()生命周期方法获取活动引用。

如果您正在使用sherlock操作栏,则调用getSherlock()。getActionBar()

答案 2 :(得分:0)

您可以为此创建一个自定义布局,然后在onCreateView方法中使用。

private ActionBar actionBar;

OnCreateView方法:

actionBar = getActivity().getActionBar();
if (actionBar != null) {
    actionBar.setCustomView(R.layout.actionbar_inner_custom_view);
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
}

答案 3 :(得分:0)

声明变量ActionBar toolbar并以这种方式使用它:

toolbar=((AppCompatActivity) getActivity()).getSupportActionBar();

toolbar.setHomeAsUpIndicator(R.drawable.ic_arrow_left);
toolbar.setTitle("Detalhes");

答案 4 :(得分:0)

如果您使用 Kotlin 语言进行开发,您可以这样做:

(activity as AppCompatActivity).supportActionBar?.setSubtitle(R.string.your_string)