我在找出如何恢复动态创建的Drawable时遇到问题,我在方向更改后加载到DialogFragment中。当我想显示对话框时,我实例化DialogFragment并将drawable设置为:
DialogStrokeOrder dialog = DialogStrokeOrder.newInstance(gKanjiDiagram);
dialog.show(getActivity().getFragmentManager(), DIALOG_STROKE_ORDER);
gKanjiDiagram
是一个Drawable我是从我从应用程序的主扩展文件中提取的SVG创建的。 DialogFragment是超级基本的,因为它需要做的只是显示Drawable:
public class DialogStrokeOrder extends DialogFragment
{
Drawable gStrokeDiagram;
private static final String TAG = "DialogStrokeOrder";
public static DialogStrokeOrder newInstance(Drawable diagram)
{
DialogStrokeOrder dso = new DialogStrokeOrder();
dso.setDiagram(diagram);
return dso;
}
public void setDiagram(Drawable diagram)
{
this.gStrokeDiagram = diagram;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.kanji_stroke_order);
LayoutInflater inflater = getActivity().getLayoutInflater();
View layout = inflater.inflate(R.layout.dialog_strokeorder, null);
// Display the SVG
ImageView iv = (ImageView) layout.findViewById(R.id.stroke_order_diagram);
iv.setImageDrawable(gStrokeDiagram);
builder.setView(layout);
Dialog dialog = builder.create();
dialog.show();
return dialog;
}
}
我遇到的问题是,旋转后,对话框仍然可见,但图表消失了。我希望通过将Drawable添加到outState
中的onSaveInstanceState()
Bundle来保留Drawable,但是没有“putDrawable()”方法,所以我不知道该怎么做。
我有什么选择?
答案 0 :(得分:0)
似乎最常见的方法是转换为位图并使用putParcelable()
答案 1 :(得分:0)
您可以自己管理方向更改。您可以查看有关此选项here的一些讨论。不完全是您要求的解决方案,但可能提供比传递drawable更好的替代方案。
答案 2 :(得分:0)
你可以转换为字节数组并写入Parcelable,但是大小不能太大, 这将引发异常。
答案 3 :(得分:0)
你可以将drawable堵塞到一个保留的片段中,或者只是保留你当前正在工作的片段(虽然要注意保留的片段与后面的堆栈不一致)。
答案 4 :(得分:0)
你可以转换为位图,然后只保存图像,然后在下次加载该图像。