[Kotlin_Android] Activity에서 Fragment로 유저정보 전달

Jamwon·2021년 4월 19일
0

Kotlin_Android

목록 보기
4/30

이전 글에서 SharedPreferences로 로그인 정보를 저장하는 것을 해보았는데 로그인 후에 메인페이지에서 마이페이지로 fragment로 전환할때 Activity 에서 얻은 정보를 fragment로 전달하는 방법을 알아보았다.

참고 블로그

보통 구글검색을 통해 이러이러한 방법들이 있다는것을 알고 그다음에 공식문서등을 찾아본다.

Bundle

Bundle 클래스을 이용해서 정보를 전달하는데

a mapping from String keys to various Parcelabel values. 라고 한다.

Parcelable

parcel은 꾸러미라는 뜻인데 Bundle에서 String과 같이 간단한 data는 바로 value로 쓸수있지만 data class같은 것은 양이 방대하면 value로 쓰기가 어렵기 때문에 사용하게 된다.

근데 나는 유저 정보가 많지 않았기때문에 그냥 하나씩 String으로 key: value값으로 보내주었다..

PageActivity.kt

    fun setDataAtFragment(fragment: Fragment){
        val currentUser = sharedManager.getCurrentUser()
        val bundle = Bundle()
        bundle.putString("id",currentUser.id)
        bundle.putString("name",currentUser.name)
        bundle.putString("gender",currentUser.gender)
        bundle.putString("belong",currentUser.belong)

        fragment.arguments =bundle
        setFragment(fragment)
    }
    fun setFragment(fragment:Fragment){
        val transaction = supportFragmentManager.beginTransaction()
        transaction.replace(R.id.frameLayout,fragment)
        transaction.commit()
    }

위와 같이 Fragment 교환함수와 Fragment 교환과 유저정보를 같이 전달해주는 함수를 블로그를 참조해서 만들었다.

SharedPreference에 저장되어있는 User의 정보를 가지고와서 각각의 key값에 매핑한뒤에 bundle로 보내는 방식이다!

MyPageFragment.kt

class MyPageFragment : Fragment() {
    private var id:String? =null
    private var gender:String? = null
    private var belong:String? = null


    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        arguments?.let {
            id = it.getString("id")
            gender = it.getString("gender")
            belong = it.getString("belong")
        }
    }

위와 같이 변수들을 선언해주고 bundle로 넘어온 정보들을 key값을 이용해서 불러왔다!!

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        val view:View = inflater.inflate(R.layout.fragment_my_page,container,false)
        view.et_mypage_gender.setText("${gender}")
        view.et_mypage_id.setText("${id}")
        view.et_mypage_belong.setText("${belong}")
//        return inflater.inflate(R.layout.fragment_my_page, container, false)
        return view
    }

onCreateView에서 view를 만들어주면서 저장된 회원정보는 textView에다가 입력해주었다.

결과

전달이 잘되었다!! 프로필사진은 아직 그냥 이미지파일 넣어놨다!

profile
한걸음씩 위로 자유롭게

0개의 댓글