3
我在這一塊上碰壁了。除了使用客戶適配器的對話框之外,我的DialogFragment與我所有的其他對話框都能很好地協作。第二次更改方向時,我得到一個java.lang.IllegalStateException: Fragment NewAlertDialog{447bc528} not attached to Activity
這是使用API 4+支持包。帶適配器的DialogFragment顯示AlertDialog無法在方向更改中生存
它不會在第一取向發生變化,它總是發生在第二,這意味着它發生在這個次序的對話框顯示:
- 人像 - >景觀 - >肖像 - > Java的。 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設備沒有問題。這隻發生在我測試的薑餅裝置上。任何幫助是極大的讚賞!
謝謝!
Matt。