2016-06-11 53 views
0

任何結果我從AddFragment開始DialogFragment。而在AlertDialogFragmentonActivityResult我將結果發送回AddFragmentAddFragment沒有收到任何結果。任何想法爲什麼?爲什麼我無法通過調用<strong>showPickImageDialog()</strong>方法按下按鈕接收來自onActivityResult

AddFragment:

public class AddFragment extends Fragment { 

    private static final int REQUEST_IMAGE = 3; 
    private static final String DIALOG_IMAGE = "image"; 
    private static final String TAG = "TAG"; 

    void showPickImageDialog() { 
     FragmentManager fm = getActivity() 
       .getSupportFragmentManager(); 
     AlertDialogFragment pdialog = new AlertDialogFragment(); 
     pdialog.setTargetFragment(this, REQUEST_IMAGE); 
     pdialog.show(fm, DIALOG_IMAGE); 
    } 



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


      if (requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK){ 

       Log.e(TAG,"back in AddFragment"); 

      } 
     } 
} 

在AlertDialogFragment林調用從onActivityResult方法sendResult方法。 SendResult方法被稱爲我檢查與日誌

AlertDialogFragment:

public class AlertDialogFragment extends DialogFragment { 

private final static String TAG = "Cload"; 
public static final String EXTRA_PHOTOFILENAME = 
     "com.example.tadas.dreamcload1.image"; 
private static final int REQUEST_IMAGE = 3; 
private String filename; 
private Uri uri; 


private void sendResult(int resultCode) { 
    if(getTargetFragment() == null){return;} 

    Intent i = new Intent(); 
    i.putExtra(EXTRA_PHOTOFILENAME,filename); 
    getTargetFragment() 
      .onActivityResult(getTargetRequestCode(), resultCode, i); 

} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    //LayoutInflater inflater = getLayoutInflater(); 
    // View dialogLaout = inflater.inflate(R.layout.custom_dialog_pick_image,null); 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View view = inflater.inflate(R.layout.custom_dialog_pick_image, null); 
    final AlertDialog dialog = new AlertDialog.Builder(getActivity()) 
      .setView(view) 
      .create(); 
    ImageButton gallerybtn = (ImageButton)view.findViewById(R.id.gallery); 
    ImageButton camerabtn = (ImageButton)view.findViewById(R.id.camera); 

    gallerybtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.e(TAG,"gallery btn pressed"); 
      Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
        startActivityForResult(intent, REQUEST_IMAGE); 
     } 
    }); 
    camerabtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     } 
    }); 


    return dialog; 
} 

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

    if (requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK){ 

    uri = data.getData(); 

     final String[] filePathColumn = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DISPLAY_NAME}; 
     Cursor c = getActivity().getContentResolver() 
       .query(uri,filePathColumn,null,null,null); 

     if (c.moveToFirst()){ 
      int ids = c.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      uri = Uri.parse(c.getString(ids)); 
      filename = uri.toString(); 
      c.close(); 
     } 
     sendResult(Activity.RESULT_OK); 
     dismiss(); 
    } 

} 

回答

1

您可以覆蓋你的onActivityResult方法在你Activity,並打電話給你的碎片的onActivityResult像下面手動:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.your_container); 
    fragment.onActivityResult(requestCode, resultCode, data); 
} 

你可以在您的活動的onActivityResult方法中定義此部分:

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

    if (requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK){ 

    uri = data.getData(); 

     final String[] filePathColumn = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DISPLAY_NAME}; 
     Cursor c = getActivity().getContentResolver() 
       .query(uri,filePathColumn,null,null,null); 

     if (c.moveToFirst()){ 
      int ids = c.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      uri = Uri.parse(c.getString(ids)); 
      filename = uri.toString(); 
      c.close(); 
     } 
     // You do not need this any more 
     //sendResult(Activity.RESULT_OK); 
     //dismiss(); 
     // Just find your fragment and call it's onActivityResult 
     Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.your_container); 
     fragment.onActivityResult(requestCode, resultCode, data); 
    } 

} 

我覺得這個改變會幫助你。

+0

仍然結果不回來 – kosas

相關問題