Sherlock dialogue snippet not showing on devices using android v4 +

I just discovered that one of my old apps had a problem with dialog boxes. It uses actionbarsherlock. In the app, some dialogs are not displayed on android v4 +. I want to update my app, but I can't port the app to AppCompat because it will be so much work.

I am showing a dialog when clicking a list item

    @Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    String selected = titles[position];

    if (selected.equals(first)) {
        showAudioSourceDialog();
    } else if (selected.equals(second)) {
        showAudioEncoderDialog();
    } else if (selected.equals(third)) {
        showSamplingRateDialog();
    } else if (selected.equals(fourth)) {
        showAudioBitrateDialog();
    } else if (selected.equals(fifth)) {
        showAudioFormatDialog();
    } else if (selected.equals(sixth)) {
        showAudioChannelDialog();
    } else if (selected.equals(seventh)) {
        showAudioBackgroundRecordingDialog();
    }

}

      

Only encoders and formatting are not displayed, but others work fine. This is how I display dialogs

 private void showAudioFormatDialog() {
      FragmentTransaction ft = getFragmentManager().beginTransaction();
      Fragment prev = getFragmentManager().findFragmentByTag("dialog");
      if (prev != null) {
        ft.remove(prev);
      }
    ft.addToBackStack(null);

    // Create and show the dialog.
    DialogFragment newFragment = AudioFormatDialog.newInstance();

    newFragment.show(ft, "dialog");
}

private void showAudioBitrateDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prev = getFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    // Create and show the dialog.
    DialogFragment newFragment = AudioBitrateDialog.newInstance();

    newFragment.show(ft, "dialog");
}
private void showAudioEncoderDialog() {
    // DialogFragment.show() will take care of adding the fragment
    // in a transaction. We also want to remove any currently showing
    // dialog, so make our own transaction and take care of that here.
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prev = getFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    // Create and show the dialog.
    DialogFragment newFragment = AudioEncoderDialog.newInstance();

    newFragment.show(ft, "dialog");
}

      

These are my dialog fragment classes

public static class AudioEncoderDialog extends SherlockDialogFragment {

    public static AudioEncoderDialog newInstance() {
        AudioEncoderDialog frag = new AudioEncoderDialog();
        return frag;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final AlertDialog levelDialog;
        CharSequence[] items = null;
        int option = getAudioEncoderOption();
        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.FROYO) {

            items = new CharSequence[] { "AMR_NB(Narrowband)" };
        } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1) {

            items = new CharSequence[] { " AMR (Narrowband)",
                    " AMR (Wideband)", "AAC Low Complexity (AAC-LC)" };
        } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN) {

            items = new CharSequence[] { " AMR_NB(Narrowband)",
                    " AMR (Wideband)", "AAC Low Complexity (AAC-LC)",
                    "Enhanced Low Delay AAC (AAC-ELD)",
                    "High Efficiency AAC (HE-AAC)" };

        }
        // Creating and Building the Dialog
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Choose your Audio Encoder");
        levelDialog = builder.create();
        builder.setSingleChoiceItems(items, option,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {

                        switch (item) {
                        case 0:

                            break;
                        case 1:

                            break;
                        case 2:

                            break;
                        case 3:


                            break;
                        case 4:

                            break;

                        }
                        levelDialog.dismiss();
                    }
                });

        return builder.create();

    }

}

public static class AudioBitrateDialog extends SherlockDialogFragment {

    public static AudioBitrateDialog newInstance() {
        AudioBitrateDialog frag = new AudioBitrateDialog();
        return frag;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final AlertDialog levelDialog;
        int option = getAudioBitrateOption();
        // Strings to Show In Dialog with Radio Buttons
        final CharSequence[] items = { " 8Bit ", " 16Bit" };

        // Creating and Building the Dialog
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Choose your Audio Bitrate");
        levelDialog = builder.create();
        builder.setSingleChoiceItems(items, option,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {

                        switch (item) {
                        case 0:

                            dismiss();

                            break;
                        case 1:

                            break;

                        }
                        levelDialog.dismiss();
                    }
                });

        return builder.create();

    }
}

      

The audio bitrate dialog is displayed, but the sensor dialog is not displayed, it seems to have much the same code. How can I show all dialogs?

This is how I want it to appear on every device:

enter image description here

This is how it displays on my Nexus 5 and emulator with Android 4.4:

enter image description here

+3


source to share


1 answer


Within the framework, AudioEncoderDialog.onCreateDialog

you are clearly not addressing the case of KitKat, which is the device you are testing with.



0


source







All Articles