2014-01-13 35 views
1

我有一個問題搞清楚如何恢復一個動態創建的Drawable我已經加載到一個方向改變後的DialogFragment。當我想顯示的對話框中,我實例化DialogFragment並設置可繪製這樣:如何在設備旋轉後保留動態創建的Drawable?

DialogStrokeOrder dialog = DialogStrokeOrder.newInstance(gKanjiDiagram); 
dialog.show(getActivity().getFragmentManager(), DIALOG_STROKE_ORDER); 

gKanjiDiagram是在我從一個SVG我從應用程序的主擴展文件拉創建一個可繪製。該DialogFragment是超級基本的,因爲它需要做的一切都顯示繪製對象:

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

我遇到的問題是,旋轉後,對話框仍然可見,但圖中消失。我想要通過將其添加到onSaveInstanceState()outState包中來保留Drawable,但沒有「putDrawable()」方法,所以我不知道該怎麼做。

我有什麼選擇?

回答

0

你可以管理的方向改變自己。你可以看看這個選項的一些討論here。不完全是你要求的解決方案,但可能會提供一個比傳遞drawable更好的選擇。

0

您可以轉換爲字節數組並寫入Parcelable,但大小不能太大, 這會引發異常。

0

您可以將drawable插入到保留的片段中,或者簡單地保留當前的工作片段(但請注意保留的片段不能很好地與後端堆棧配合使用)。

0

您可以轉換爲位圖,然後保存imagen,然後在下次加載該圖像。

相關問題