3

私はこの壁の壁に当たっています。私のDialogFragmentは、カスタマーアダプタを使用するものを除いて他のすべてのダイアログとうまく機能します。 2度目の向き変更時java.lang.IllegalStateException: Fragment NewAlertDialog{447bc528} not attached to ActivityこれはAPI 4+サポートパッケージを使用しています。 >風景 - - >肖像 - > javaのアダプタでAlertDialogを表示しているDialogFragmentは方向変更を生き延びません

  • ポートレート:これは、最初の姿勢変化に起こらない

    は、それは常に、それはダイアログ上映と、この順番で起こる意味、第二に起こります。 lang.IllegalStateException

  • 風景 - >肖像 - >風景 - >ここでjava.lang.IllegalStateException

はダイアログです:

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

これは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; 
    } 
} 

私はAlertDialog.Builderから.setAdapter()コールを削除する場合、問題が消えるので、それはアダプタを含むでの問題であることを知っています。

また、私のICSデバイスに問題はないということです。これは、私がテストしているジンジャーブレッドのデバイスでのみ発生します。どんな助けでも大歓迎です!

ありがとうございました!

マット。

答えて

2

問題を解決しました。 DialogFragmentの代わりにActivityからgetResources()リソースを呼び出すことは、必要な変更でした。前

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

後:

int dp10 = (int) (10 * getActivity().getResources().getDisplayMetrics().density + 0.5f); 
関連する問題