so I want to pass data from one to another. I'm using ViewPager to make fragments change when I click some trigger which is a button. What I want is when I click the buttonLanjut
from MainActivity, I can set data from MerchantTambahBarangFragment
and get that data to MerchantTambahKategoriFragment
. I'm confused because the trigger is on MainActivity
not in the fragment. Code below
ParentActivity which is same as MainActivity
class MerchantTambahParentActivty : AppCompatActivity(){
lateinit var binding: ActivityMerchantTambahParentActivtyBinding
var currentFragPosition = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMerchantTambahParentActivtyBinding.inflate(layoutInflater)
setContentView(binding.root)
//Toolbar
setToolbar()
//Tabpager
val pagerAdapter = PagerAdapterTambahBaran(this, supportFragmentManager)
binding.viewPager.adapter = pagerAdapter
nextOrBackPageAction()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
startActivity(Intent(this, MerchantKelolaBarangActivity::class.java))
return true
}
}
return super.onOptionsItemSelected(item)
}
private fun setToolbar() {
supportActionBar?.apply {
title = "Tambah Barang"
setDisplayHomeAsUpEnabled(true)
}
}
@SuppressLint("SetTextI18n")
private fun nextOrBackPageAction(){
when (currentFragPosition) {
0 -> {
binding.buttonKembali.visibility = View.GONE
}
}
binding.buttonLanjut.setOnClickListener {
binding.buttonKembali.visibility = View.VISIBLE
if(currentFragPosition <= 3){
currentFragPosition++
Toast.makeText(this, currentFragPosition.toString(), Toast.LENGTH_SHORT).show()
if(currentFragPosition == 4){
binding.buttonLanjut.text = "SUBMIT"
binding.buttonLanjut.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null)
}
binding.viewPager.setCurrentItem(currentFragPosition, true)
}
}
binding.buttonKembali.setOnClickListener {
if(currentFragPosition > 0){
currentFragPosition--
if(currentFragPosition == 0){
binding.buttonKembali.visibility = View.GONE
}
binding.buttonLanjut.text = "Lanjut"
binding.buttonLanjut.setCompoundDrawablesWithIntrinsicBounds(0, 0, id.co.leholeh.R.drawable.ic_arrow_next, 0)
binding.viewPager.setCurrentItem(currentFragPosition, true)
}
}
}
}
MerchantTambahBarangFragment.kt
class MerchantTambahBarangFragment : Fragment() {
lateinit var binding : FragmentMerchantTambahBarangBinding
private lateinit var cacheUtil: CacheUtil
private lateinit var auth: Login
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
binding = FragmentMerchantTambahBarangBinding.inflate(inflater,container,false)
cacheUtil = CacheUtil()
cacheUtil.start(requireActivity(), ConstantAuth.PREFERENCES)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (TextUtils.isEmpty(this.cacheUtil.get(ConstantAuth.AUTH))) {
startActivity(Intent(requireActivity(), LoginActivity::class.java))
} else {
auth = getAuth(cacheUtil)
//setDataCategories()
binding.inputCover.setOnClickListener {
ImagePicker.create(this)
.single()
.start()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (ImagePicker.shouldHandle(requestCode, resultCode, data)) {
val image: Image = ImagePicker.getFirstImageOrNull(data)
Glide.with(binding.imageViewCover).load(image.uri).into(binding.imageViewCover)
binding.imageViewCover.visibility = View.VISIBLE
}
super.onActivityResult(requestCode, resultCode, data)
}
}
MerchantTambahKategoriFragment.kt
class MerchantTambahKategoriFragment : Fragment() {
lateinit var binding : FragmentTambahKategoriBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
binding = FragmentTambahKategoriBinding.inflate(inflater, container, false)
return binding.root
}
}
PagerAdapterTambahBarang.kt
class PagerAdapterTambahBaran(
private val context: Context,
fragmentManager: FragmentManager ) :
FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
override fun getCount() = 5
override fun getItem(position: Int): Fragment = when (position) {
0 -> MerchantTambahBarangFragment()
1 -> MerchantTambahKategoriFragment()
2 -> MerchantTambahLokasiFragment()
3 -> MerchantTambahFotoFragment()
4 -> MerhchantSubmitBarangFragment()
else-> Fragment()
}
}