스팀 앱 개발기 #14 - 지갑 서브화면(WalletFragment)에서 계정 인식하기

메인 화면에서 태그/계정 검색 레이아웃을 추가했습니다. 지난 포스트에서 계정을 프로파일 서브화면에서 읽고 이를 보여주는 것을 구현했죠. 이번 포스트에서는 사용자가 입력한 계정을 WalletFragment에서 어떻게 읽을 수 있는지를 보여 드리고자 합니다. 지난 포스트에서 보여드린 내용과 비슷합니다.


스크린샷

처음에 계정은 아래 그림과 같이 비어있고요.

IMAGE 2022-08-22 23:47:34.jpg

계정을 입력하고 SEARCH 버튼을 클릭하면, 화면에 보이는 텍스트는 "Current account is @(계정)."으로 바뀝니다.

IMAGE 2022-08-22 23:46:34.jpg


작업 개요

  • MainViewModel 클래스: 작업할 게 없습니다.
  • MainActivity 클래스: 작업할 게 없습니다.
  • WalletFragment 클래스: MainActivity 객체의 MainViewModel 객체 접근 그리고 후자의 currentAccount 관찰
  • WalletViewModel 클래스: _text 라이브 데이터를 외부에서 변경 가능하게 함
  • fragment_wallet.xml 파일: MainViewModel 객체를 변수로 추가

WalletFragment 클래스: MainActivity 객체의 MainViewModel 객체 접근 그리고 후자의 currentAccount 관찰

WalletFragment 클래스에 activityViewModel 필드를 추가하였으며, 이것은 MainActivity 객체가 소유한 MainViewModel 객체입니다.

val activityViewModel by lazy {
    ViewModelProvider(requireActivity()).get(MainViewModel::class.java)
}

MainViewModel 객체의 currentAccount 라이브 데이터를 관찰하고 변경을 처리하는 코드를 아래와 같이 만들었습니다. 계정이 "dorian-mobileapp"으로 변경되면, 텍스트로 "Current account is @dorian-mobileapp."이라고 보여주기 위해 WalletViewModel 객체의 text 라이브 데이터를 변경합니다. 코드는 아래와 같구요. ProfileFragment에서 작성한 것과 내용은 같습니다. 지금은 같지만, 나중에 데이터를 읽기 위한 API 실행을 구현하면서 앞으로 내용이 달라질 것입니다.

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    activityViewModel.currentAccount.removeObservers(viewLifecycleOwner)
    activityViewModel.currentAccount.observe(viewLifecycleOwner, currentAccountObserver)
}

private val currentAccountObserver = Observer<String> {
    if (it.length > 2) {
        viewModel.text.value = "Current account is @${it}."
    }
}

WalletViewModel 클래스: _text 라이브 데이터를 외부에서 변경 가능하게 함

이것 또한 ProfileViewModel 클래스에서 변경했을 때와 패턴은 같습니다. 중복 설명은 생략하고 코드로 대신합니다.

class WalletViewModel : ViewModel() {

    val text = MutableLiveData<String>().apply {
        value = "This is wallet Fragment"
    }

}

fragment_wallet.xml 파일: MainViewModel 객체를 변수로 추가

이것 또한 fragment_profile.xml과 마찬가지로 당장 필요하기보다는 나중을 위해 작업한 것입니다. FragmentWalletBinding 객체도 MainViewModel 객체에 접근할 수 있도록 합니다.

<data>
    <variable
        name="viewModel"
        type="lee.dorian.steem_ui.ui.wallet.WalletViewModel" />
    <variable
        name="activityViewModel"
        type="lee.dorian.steem_ui.MainViewModel" />
</data>


GitHub Commit


지난 스팀 앱 개발기

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Upvoted! Thank you for supporting witness @jswit.
default.jpg

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.032
BTC 57791.14
ETH 2962.27
USDT 1.00
SBD 3.67