ViewPager 안에 파생된 개별Activity에서 개별Fragment로 값 넘기기 질문입니다.

조회수 695회

안녕하세요 이번에 안드로이드를 처음 접하는 대학생입니다. 이미지

제가 구상하고 있는 앱의 대략적인 부분입니다.Image Fragement 의 리사이클러뷰의 아이템을 클릭 시 .Image Activity를 불러 옵니다. 다름이 아니라 Image Activity에서 하트 버튼을 누르면 Heart Fragment로 Image번호값을 Bundle로 넘기는데 이미 프레그먼트가 올라가져 있는상태여서 Bundle값이 null값으로 처리가 됩니다. Image Activity code 입니다.

 if (targetBoolean)
            heartButton.setSelected(true)
        else
            heartButton.setSelected(false)
        var heartfragment=HeartFragment()
        var bundle=Bundle()
        heartButton.setOnClickListener {
            if (heartButton.isSelected) {
                heartButton.setSelected(false) //눌린 상태를 풀기
                removeBoolean("image+$label") //상태 지우기
                bundle.putInt("HeartRemove",label)
                heartfragment.setArguments(bundle)
                dispatchEventToFragment(label)

            } else {
                heartButton.setSelected(true) //눌린 상태로 만들기
                saveBoolean("image+$label", true) //상태 생성
                bundle.putInt("HeartInsert",label)
                heartfragment.setArguments(bundle)
            }
        }

Heart Fragment code입니다.

class HeartFragment : Fragment() {
    var Insert :Int?=null
    var Remove:Int?=null
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var view= inflater.inflate(R.layout.fragment_heart, container, false)
        var RecyclerView =view.findViewById<RecyclerView>(R.id.RecyclerView_Heart)
        RecyclerView.setHasFixedSize(true)
        var LayoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
        RecyclerView.setLayoutManager(LayoutManager)
        var adapter=HeartAdapter()
        adapter.setOnItemClickListener(object:OnHeartItemClickListener{
            override fun onItemClick(holder: HeartAdapter.ViewHolder?, view: View?, position: Int) {
                val item = adapter.getItem(position)
                Toast.makeText(context, "추후 구현: "+holder , Toast.LENGTH_LONG).show()
            }

        })

            var bundle=this.arguments
            Insert = bundle?.getInt("HeartInsert")
            Remove = bundle?.getInt("HeartRemove")
            if(Insert!=null){
                Toast.makeText(context, "넘어옴 " , Toast.LENGTH_LONG).show()
            }
            if(Remove!=null){
            }



        RecyclerView.setAdapter(adapter)
        return view

    }

또한 애쉬코드에서 여러가지 답변을 찾아보았지만 밑에 같은 경우는

public Fragment findFragmentByPosition(int position) {
    FragmentStatePagerAdapter asdf = adapter;
    return getSupportFragmentManager().findFragmentByTag(
            "android:switcher:" + viewPager.getId() + ":" +
                    asdf.getItem(position));
}

Image Activity에 viewPager가 상속되어 있지 않기 때문에 난해합니다.. 뷰페이저 및 Main Activity code 입니다.

class MainFragmentStatePagerAdapter(fm : FragmentManager, val fragmentCount : Int) : FragmentStatePagerAdapter(fm) {
    override fun getItem(position: Int): Fragment {
        when (position) {
            0 -> return ImageFragment()
            1 -> return HeartFragment()
            2 -> return AwardFragment()
            else -> return ImageFragment()
            }
        }

        override fun getCount(): Int = fragmentCount // 자바에서는 { return fragmentCount }
    }

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        FirebaseApp.initializeApp(this)
        configureBottomNavigation()
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) //화면지속을 위함.
        checkPermissions()
    }
    private fun configureBottomNavigation(){
        vp_ac_main_frag_pager.adapter = MainFragmentStatePagerAdapter(supportFragmentManager, 3)
        tl_ac_main_bottom_menu.setupWithViewPager(vp_ac_main_frag_pager)

        val bottomNaviLayout: View = this.layoutInflater.inflate(R.layout.bottom_navigation_tab, null, false)
        tl_ac_main_bottom_menu.getTabAt(0)!!.customView = bottomNaviLayout.findViewById(R.id.btn_bottom_navi_home_tab) as RelativeLayout
        tl_ac_main_bottom_menu.getTabAt(1)!!.customView = bottomNaviLayout.findViewById(R.id.btn_bottom_navi_people_tab) as RelativeLayout
        tl_ac_main_bottom_menu.getTabAt(2)!!.customView = bottomNaviLayout.findViewById(R.id.btn_bottom_navi_award_tab) as RelativeLayout
    }
    }

일주일 정도 해매고 있는것 같습니다 미리 답변 감사합니다

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)