0

The idea is to get a file from the Intent.ACTION_GET_CONTENT in a fragment B into a DialogFragment, and transfer it to a fragment A which is not a part of the DialogFragment.

According to this, I'm trying to transfer the file via onActivityResult() to the fragment A.

Until now, I have tried:

  • using a view model but the live data stays null,
  • onSaveInstanceState() from fragment B but I figured fragmentA being already created, it calls only onResume(),
  • A Data transfer interface, and now I'm trying target fragment, but the target fragment returns null.

There is something I'm clearly missing, I'd be glad to get a little clue on this

Fragment A

    private fun showDialog(){
    val ft: FragmentTransaction = activity!!.supportFragmentManager.beginTransaction()
    val prev: Fragment? = activity!!.supportFragmentManager.findFragmentByTag("dialog_fragment")
    if (prev != null) {
        ft.remove(prev)
    }
    ft.addToBackStack(null)
    // Create and show the dialog.
    val dialogFragment = CustomAddFilesDialogRoot()
    dialogFragment.setTargetFragment(this@UploadingFilesFragment,0)
    dialogFragment.show(activity!!.supportFragmentManager, "dialog")

}
   

Fragment B

   class BrowseFileFragment : Fragment() {

var viewModel : TeacherActivityViewModel? = null
private var editText : EditText? =null
var name :  String? = null
var fileToShare  : FileToShare? = null


override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {


    // Inflate the layout for this fragment

     val v  =  inflater.inflate(R.layout.fragment_browse_file, container, false)

     viewModel =  ViewModelProvider.AndroidViewModelFactory(activity!!.application)
        .create(TeacherActivityViewModel::class.java)

    val browser = v.findViewById<Button>(R.id.browser)
    editText = v.findViewById(R.id.browsed_name_edit)
    browser.setOnClickListener {
            if(editText!!.text.toString() != ""){
                val i = Intent(Intent.ACTION_GET_CONTENT)
                i.type = "*/*"
                startActivityForResult(i, 101)
            }

        }


    Log.i("target",targetFragment.toString())



    return  v
}


private fun getFileExtension(uri: Uri): String? {
    val contentResolver = context!!.contentResolver
    val mimeTypeMap = MimeTypeMap.getSingleton()
    return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri))
}






override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if( data == null) return

    val file =  File(data.data.toString())
    val name = "${ getDate()}_${editText!!.text}.${getFileExtension(data.data!!)}"
     fileToShare = FileToShare(name,file.path)

    val intent = Intent()
    intent.putExtra("file", fileToShare)
    Log.i("target",targetFragment.toString())
    targetFragment!!.onActivityResult(
        targetRequestCode, Activity.RESULT_OK, intent
    )

    ((this.parentFragment)as DialogFragment).dismiss()
}
} 
Jason Aller
  • 3,541
  • 28
  • 38
  • 38
Ruben Mim
  • 136
  • 1
  • 6

0 Answers0