Question

J'ai heurté un mur sur celui-ci. Mon fragment de dialogue fonctionne bien avec toutes les autres boîtes de dialogue que j'ai, à l'exception de celle qui utilise un adaptateur client. Lorsque je change d'orientation la deuxième fois que j'obtiens un java.lang.IllegalStateException: Fragment NewAlertDialog{447bc528} not attached to Activity Il s'agit du package de support API 4+.

Cela ne se produit pas lors du premier changement d'orientation, cela se produit toujours sur le second, ce qui signifie que cela se produit dans cet ordre avec la boîte de dialogue indiquant:

  • Portrait -> Paysage -> Portrait -> Java.lang.ILLEGALSTATEException
  • Paysage -> Portrait -> Paysage -> Java.lang.ILLEGALSTATEException

Voici la boîte de dialogue:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
        final DialogItem[] items = {
                new DialogItem(getString(R.string.test1), R.drawable.test1),
                new DialogItem(getString(R.string.test2), R.drawable.test2),
            };
        ListAdapter adapter = new ArrayAdapter<DialogItem>(getActivity(),
            android.R.layout.select_dialog_item,
            android.R.id.text1,
            items){
                public View getView(int position, View convertView, ViewGroup parent) {
                    View v = super.getView(position, convertView, parent);
                    TextView tv = (TextView)v.findViewById(android.R.id.text1);
                    tv.setCompoundDrawablesWithIntrinsicBounds(items[position].icon, 0, 0, 0);
                    int dp10 = (int) (10 * getResources().getDisplayMetrics().density + 0.5f);
                    tv.setCompoundDrawablePadding(dp10);
                    return v;
                }
            };
        return new AlertDialog.Builder(getActivity())
                    .setTitle(R.string.title)
                    .setIcon(R.drawable.icon)
                    .setAdapter(adapter, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) {
                            if (item == 0)
                                doThis();
                            else
                                doThat();
                        }
                    }).create();
}

Ceci est un dialogine:

class DialogItem {
    public final String text;
    public final int icon;
    public DialogItem(String text, Integer icon) {
        this.text = text;
        this.icon = icon;
    }
    @Override
    public String toString() {
        return text;
    }
}

Je sais que c'est un problème avec la contenu d'un adaptateur parce que si je supprime le .setAdapter() appeler de AlertDialog.Builder Ensuite, le problème disparaît.

Il n'y a pas non plus de problème sur mon appareil ICS. Cela ne se produit que sur l'appareil en pain d'épice sur lequel je teste. Toute aide est grandement appréciée!

Merci!

Mat.

Était-ce utile?

La solution

Problème résolu. Appeler GetResources () Ressources de l'activité au lieu du dialogue de dialogue était le changement nécessaire.

Avant de:

int dp10 = (int) (10 * getResources().getDisplayMetrics().density + 0.5f);

Après:

int dp10 = (int) (10 * getActivity().getResources().getDisplayMetrics().density + 0.5f);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top