2016-07-13 4 views
0

내 응용 프로그램에이 체인이 있습니다. 조각을 만드는 활동입니다. 이 프래그먼트에는 DialogFragment를 호출하는 버튼 클릭이 있습니다. DialogFragment를 사용하면 카메라 메모리를 선택하거나 장치 메모리에서 이미지를 선택할 수 있습니다.DialogFragment에서 데이터를 조각화하여 레크리에이션 활동에서 살아남는 방법

DialogFragment는 새로운 활동에서 자르기 위해 이미지를 보내는 인 텐트를 호출합니다. 그리고 croped 이미지의 마지막 경로는 onActivityResult를 통해 DialogFragment로 되돌려 보내집니다.

얻어진 경로

은 단편에 전달되어야하고 난 사용자가 어떤 장치의 방향이 변경 될 때까지이 lesson

용액이 잘 작동하지 에서처럼 활성 인터페이스를 통해 사용 운동.

장치가 DialogFragment 단계 또는 자르기 활동 ​​단계에서 회전하면 첫 번째 활동이 다시 생성되고 조각이 다시 만들어지고 DialogFragment 인스턴스가 삭제됩니다. 그래서 콜백은 실행되지 않고 아무 일도 일어나지 않습니다. 내가 당신의 코드를 보여 드리죠 :

SettingUnitActivity

FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     addNewUnitFragment = new AddNewUnitFragment(); 
     fragmentTransaction.replace(R.id.single_unit_fragment_container,addNewUnitFragment,"myff"); 
     fragmentTransaction.commit(); 

//My callback 

@Override 
public void call(String string) { 
    AddNewUnitFragment addNewUnitFragment = (AddNewUnitFragment) 
      getFragmentManager().findFragmentById(R.id.single_unit_fragment_container); 
    if(addNewUnitFragment != null) { 
     addNewUnitFragment.changeFragImage(string); 
    } else { 

    } 
} 

AddNewUnitFragment

public void onClick(View v) { 
    switch (v.getTag().toString()) { 
     case "add_image": 
      DialogImageSelect imageSelDialog = DialogImageSelect.newInstance(0); 
      imageSelDialog.show(getFragmentManager(),"imageSelDialog"); 
      break; 

... 

//Function which should be called from SettingUnitActivity 

public void changeFragImage (String string) { 
//Do something with string 
} 

DialogImageSelect

public static interface dateCallBack { 
    public abstract void call(String string); 
} 


static DialogImageSelect newInstance(int id) { 
    DialogImageSelect di = new DialogImageSelect(); 
    Bundle args = new Bundle(); 
    args.putInt("id", id); 
    di.setArguments(args); 
    return di; 
} 


@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
     callerActivity = (dateCallBack)activity; 

} 

//Here we take and send image path from croper activity 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

if(resultCode != Activity.RESULT_CANCELED) { 
     if(requestCode == FROM_CROPPER) { 
      if(data != null) { 
       croppedFilePath = data.getStringExtra("filePath"); 
       System.out.println("CALL "+callerActivity); 
        this.callerActivity.call(croppedFilePath); 
       dismiss(); 
      } 
     } 
    } 
} 

장치가 회전 할 때 어떻게 그것을 유지 조각에 데이터를 보낼 수 있습니까?

UPD : 내 질문에 대한 대답은 부분적으로 this 항목에서 밝혀하지만 활동 회전 후 다시 경우 단편 활동을 통해 DialogFragment에서 인터페이스 콜백을 사용하여 데이터를 전달할 수있는 방법을 아무런 설명이 없습니다.

답변

0

기본적으로 onSaveInstanceState() 메소드의 조각에 인스턴스 상태를 저장해야합니다. 그런 다음 Base Activity의 onCreate() 메소드 내에서이 유지 된 상태를 사용하십시오.

참조 :

Once for all, how to correctly save instance state of Fragments in back stack?

http://emuneee.com/blog/2013/01/07/saving-fragment-states/

당신이에 대한 자세한 구글과 유래를 검색 할 수 있습니다. 당신의 질문과 답은 정답입니다.