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()
}
}