I am having a Fragment and below is how i am adding menus
in my onCreateOptionsMenu
programatically
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
menu.add(0, 0, 0, new Config().menuIconWithText(
Objects.requireNonNull(ContextCompat.getDrawable(requireActivity(), R.drawable.ic_start)),
requireActivity().getString(R.string.start)));
menu.add(1, 1, 1, new Config().menuIconWithText(
Objects.requireNonNull(ContextCompat.getDrawable(requireActivity(), R.drawable.ic_stop)),
requireActivity().getString(R.string.stop)));
super.onCreateOptionsMenu(menu, inflater);
}
Below is my menuIconWithText
function used in the adding of the menus
public CharSequence menuIconWithText(Drawable drawable, String title) {
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
SpannableString spannableString = new SpannableString(" " + title);
ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BOTTOM);
spannableString.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
What i would like to achieve is for the menus to have a checkbox
Below is what i have tried
I first tried creating menus
in menu
layout and adding to onPrepareOptionsMenu
method like below
@Override
public void onPrepareOptionsMenu(@NonNull Menu menu) {
MenuItem enableFareTenderMenu = menu.findItem(R.id.enable_dark_theme);
enableFareTenderMenu.setChecked(false);
super.onPrepareOptionsMenu(menu);
}
Below is the layout that has id enable_dark_theme
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/enable_dark_theme"
android:title="@string/enable_dark_theme"
app:showAsAction="never"
android:checkable="true"/>
</menu>
But i got the error below
java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.MenuItem.setChecked(boolean)' on a null object reference
at myapps.apps.manuapp.fragments.MyFragment.onPrepareOptionsMenu(MyFragment.java:2321)
at androidx.fragment.app.Fragment.performPrepareOptionsMenu(Fragment.java:3144)
at androidx.fragment.app.FragmentManager.dispatchPrepareOptionsMenu(FragmentManager.java:2923)
at androidx.fragment.app.Fragment.performPrepareOptionsMenu(Fragment.java:3146)
at androidx.fragment.app.FragmentManager.dispatchPrepareOptionsMenu(FragmentManager.java:2923)
at androidx.fragment.app.FragmentController.dispatchPrepareOptionsMenu(FragmentController.java:414)
at androidx.fragment.app.FragmentActivity.onPreparePanel(FragmentActivity.java:447)
at androidx.appcompat.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:99)
at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.onPreparePanel(AppCompatDelegateImpl.java:3148)
at androidx.appcompat.app.AppCompatDelegateImpl.preparePanel(AppCompatDelegateImpl.java:1936)
at androidx.appcompat.app.AppCompatDelegateImpl.doInvalidatePanelMenu(AppCompatDelegateImpl.java:2190)
at androidx.appcompat.app.AppCompatDelegateImpl$2.run(AppCompatDelegateImpl.java:273)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:986)
at android.view.Choreographer.doCallbacks(Choreographer.java:764)
at android.view.Choreographer.doFrame(Choreographer.java:696)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:965)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7073)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
I have also tried setting actionView
to the menu with a checkbox layout but its not showing the checkbox. Below is how i tried setting actionView
menu.add(5, 5, 5, "Enable Dark Theme").setActionView(R.layout.check_box_layout).setChecked(false);
And the check_box_layout looks like this below
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>