DialogFragment表示AlertDialog带适配器不下去的方向改变
题
我撞墙了这一点。我DialogFragment工作以及与所有其他对话,我们除了一个使用一个客户适配器。改变方向时,第二次我得到一个 java.lang.IllegalStateException: Fragment NewAlertDialog{447bc528} not attached to Activity
这是使用API4+支助一揽子方案。
它不会发生在第一方向的变化,它总是发生在第二,这意味着它发生在这个顺序与该对话,表示:
- 肖像>的景观->的肖像>java。郎。IllegalStateException
- 风景->的肖像>的风景-->java。郎。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;
}
}
我知道这是一个问题与含有适配器,因为如果我删除了 .setAdapter()
电话从 AlertDialog.Builder
然后问题消失。
也奇怪的是,没有问题上我ICS设备。这只是发生在姜饼设备测试。任何帮助是非常感谢!
谢谢你!
马特。
解决方案
问题的解决。叫getResources()资源的关的活动,而不是DialogFragment是必要的更改。
之前:
int dp10 = (int) (10 * getResources().getDisplayMetrics().density + 0.5f);
之后:
int dp10 = (int) (10 * getActivity().getResources().getDisplayMetrics().density + 0.5f);
不隶属于 StackOverflow