Frage

Ich bin hier an eine Wand gestoßen.Mein DialogFragment funktioniert gut mit allen anderen Dialogen, die ich habe, mit Ausnahme des Dialogs, der einen Kundenadapter verwendet.Beim zweiten Orientierungswechsel erhalte ich ein java.lang.IllegalStateException: Fragment NewAlertDialog{447bc528} not attached to Activity Hierbei wird das API 4+ Support-Paket verwendet.

Dies geschieht nicht bei der ersten Ausrichtungsänderung, sondern immer bei der zweiten, d. h., es geschieht in dieser Reihenfolge, wobei das Dialogfeld Folgendes anzeigt:

  • Hochformat -> Querformat -> Hochformat -> java.lang.IllegalStateException
  • Querformat -> Hochformat -> Querformat -> java.lang.IllegalStateException

Hier ist der Dialog:

@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();
}

Dies ist ein DialogItem:

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;
    }
}

Ich weiß, dass es ein Problem mit der Aufnahme eines Adapters ist, denn wenn ich den entferne .setAdapter() Anruf von AlertDialog.Builder dann ist das Problem weg.

Merkwürdig ist auch, dass auf meinem ICS-Gerät KEIN PROBLEM vorliegt.Dies passiert nur auf dem Gingerbread-Gerät, auf dem ich teste.Jede Hilfe wird sehr geschätzt!

Danke schön!

Matt.

War es hilfreich?

Lösung

Problem gelöst.Das Aufrufen von getResources () -Ressourcen außerhalb der Aktivität anstelle des DialogFragments war die erforderliche Änderung.

Vorher:

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

Nachher:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top