web-dev-qa-db-ja.com

フラグメントからツールバーに字幕を設定する

フラグメントからツールバーのサブタイトルを設定するのに問題があります。 setSubTitleでNullポインター例外が発生し続けます。

@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)

字幕を設定するには、インターフェイスリスナーを作成し、フラグメントアクティビティでフラグメントの開始と停止をリッスンする必要がありますか、それとも、フラグメントからツールバーに字幕を設定する簡単な方法がありますか。

私のコードをこれ以上見る必要がある場合はお知らせください。

乾杯。

9
DrkStr

ツールバーとAppcompat21を使用するには、 AppCompatActivity を使用し、次を使用する必要があります。

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

getActivity()を呼び出す代わりに、FragmentのonAttach()ライフサイクルメソッドからアクティビティ参照を取得します。

シャーロックアクションバーを使用している場合は、getSherlock()。getActionBar()を呼び出します。

0
No Name

このために1つのカスタムレイアウトを作成してから、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);
}
0
Jay Rathod RJ

変数を宣言するActionBar toolbarそしてそれをこのように使用します:

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

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