2015-09-11 30 views
0

我有一个活动需要触发4个不同的DialogFragments,其中我触发了一个意图,从相机或图库中获取图像。 我可以保留片段状态并继续观察“onActivityResult”并将其发送到dialogfragmentx,但是当它们重新创建并且我试图再次显示从画廊获得的图像时,当我在线性布局上使用“addView”时什么也没做。 下面是从活动我的代码:方向更改无效后在DialogFragment上添加视图

private DFrag_room frag_room; 
private DFrag_terrace frag_terrace; 
private DFrag_garden frag_garden; 
private DFrag_parking frag_parking; 

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     if (frag_room != null) { 
      getSupportFragmentManager().putFragment(outState, "fragment_room", frag_room); 
     } 

     if (frag_terrace != null) { 
      getSupportFragmentManager().putFragment(outState, "fragment_terrace", frag_terrace); 
     } 

     if (frag_garden != null) { 
      getSupportFragmentManager().putFragment(outState, "fragment_garden", frag_garden); 
     } 

     if (frag_parking != null) { 
      getSupportFragmentManager().putFragment(outState, "fragment_parking", frag_parking); 
     } 
    } 

    @Override 
    public void onRestoreInstanceState(Bundle inState){ 
     FragmentManager fm = getSupportFragmentManager(); 
     frag_room = (DFrag_room) fm.getFragment(inState, "fragment_room"); 
     frag_terrace = (DFrag_terrace) fm.getFragment(inState, "fragment_terrace"); 
     frag_garden = (DFrag_garden) fm.getFragment(inState, "fragment_garden"); 
     frag_parking = (DFrag_parking) fm.getFragment(inState, "fragment_parking"); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (frag_room != null) { 
      frag_room.onActivityResult(requestCode, resultCode, data); 
     } 

     if (frag_terrace != null) { 
      frag_terrace.onActivityResult(requestCode, resultCode, data); 
     } 

     if (frag_garden != null) { 
      frag_garden.onActivityResult(requestCode, resultCode, data); 
     } 

     if (frag_parking != null) { 
      frag_parking.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

,并从dialogfragments的一个代码(这个程序是每一个相同)

私人的LinearLayout layout_images; private ImageView img_add_image;

private File photoFile; 
private ArrayList<Uri> images; 

public DFrag_room() { 
} 

public interface DFrag_roomListener { 
    void onFinishRoom(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.dfrag_room, container); 
    layout_images = (LinearLayout) view.findViewById(R.id.dfrag_room_imgs_layout); 
    img_add_image = (ImageView) view.findViewById(R.id.dfrag_room_img_add_img); 
    img_add_image.setOnClickListener(this); 
    if (savedInstanceState != null) { 
     images = (ArrayList<Uri>) savedInstanceState.getSerializable("images"); 
     for (int i = 0; i < images.size(); i++) { 
      addImage(images.get(i)); 
     } 
    } 

    setRetainInstance(true); 
    return view; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
    return dialog; 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); // <-- must call this if you want to retain dialogFragment upon rotation 
    outState.putSerializable("images", images); 
} 

@Override 
public void onDestroyView() { 
    if (getDialog() != null && getRetainInstance()) 
     getDialog().setDismissMessage(null); 
    super.onDestroyView(); 
} 

@Override 
public void onActivityResult(int reqCode, int resCode, Intent data) { 
    switch (reqCode) { 
     case CONF.REQ_PHOTO: 
      if (resCode == Activity.RESULT_OK) { 
       if ((photoFile != null)) { 
        Uri img = Uri.fromFile(photoFile); 
        images.add(img); 
        addImage(img); 
       } 
      } 
      break; 

     case CONF.REQ_GALLERY: 
      if (resCode == Activity.RESULT_OK) { 
       images.add(data.getData()); 
       addImage(data.getData()); 
      } 
      break; 
    } 

    super.onActivityResult(resCode, resCode, data); 
} 

public void addImage(Uri img_uri) { 
    int margin = getResources().getDimensionPixelOffset(R.dimen.padding_x_small); 

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(img_add_image.getWidth(), img_add_image.getHeight()); 
    params.setMargins(0, 0, margin, 0); 

    RoundedImageView new_img = new RoundedImageView(getActivity()); 
    new_img.setLayoutParams(params); 
    new_img.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    new_img.setBackgroundResource(R.drawable.bg_white_stroke); 
    new_img.setCornerRadius((float) 6); 
    Glide.with(getActivity()).load(img_uri).thumbnail(0.8f).into(new_img); 
    layout_images.addView(new_img, 0); 
} 

,当我从它工作正常,意图获取图像,但是当我从URI的保存的列表(onCreateView)得到它,它doesen't工作

编辑: 对不起,应用程序doesen没有崩溃,我没有看到我的布局中的图像,它调用“addImage”,但我没有看到图像。

+0

,你可以详细解释一下你的意思是由没有工作创建它与0的宽度和高度为0创建的ImageView ?例如应用程序崩溃?或没有图像加载,布局看起来是空的?你有没有尝试过调试?函数addImage被调用了吗? –

+0

检查日志会有消息说明为什么它不可用。最可预测的问题可能是更改容器布局的高度或宽度 –

+0

我编辑了该问题 – DLock

回答

0

解决,我试图beacusa我从onCreate方法,其中img_add_image.getWidth()为0

相关问题