스팀 앱 - 개발 중: 사용자 히스토리 항목 클릭 (9) 내용 정리: 항목 클릭 처리

스팀 앱 - 개발 중: 사용자 히스토리 항목 클릭 (9) 내용 정리: 항목 클릭 처리

2024. 08. 28 (수) | Written by @dorian-mobileapp

항목 클릭 처리 리스너 인터페이스 정의

항목 클릭을 처리하기 위한 리스너 인터페이스입니다.

interface OnAccountHistoryItemClickListener {
    fun onClick(itemView: View, accountHistoryItem: AccountHistoryItem)
}

AccountHistoryItemListAdapter 클래스의 주생성자에 OnAccountHistoryItemClickListener 파라메터 추가

사용자 히스토리 리스트를 담당하는 AccountHistoryItemListAdapter 클래스의 주생성자에 파라메터가 처음에는 없었습니다. 이 화면의 첫 구현에서 항목 클릭 처리는 제외했기 때문입니다. 이번에는 클릭 처리를 구현해야 하므로 OnAccountHistoryItemClickListener 파라메터를 추가했습니다.

class AccountHistoryItemListAdapter(
    private val onAccountHistoryItemClickListener: OnAccountHistoryItemClickListener
) : RecyclerView.Adapter<AccountHistoryItemListAdapter.AccountHistoryItemListViewHolder>() {
    // ...
}

항목 클릭 처리

AccountHistoryItemListAdapter 클래스의 onBindViewHolder 메소드에서 항목 데이터와 뷰를 연결합니다. 여기에서 항목의 뷰 클릭을 구현합니다. 여기에서 주생성자의 파라메터로 추가한 OnAccountHistoryItemClickListener 구현 객체를 활용합니다. 이 인터페이스의 구현은 AccountHistoryFragment 클래스에서 구현했습니다.

override fun onBindViewHolder(holder: AccountHistoryItemListViewHolder, position: Int) {
    try {
        val accountHistoryItem = accountHistoryItemList[position]
        holder.bind(accountHistoryItem, position)
        holder.binding.root.setOnClickListener {
            onAccountHistoryItemClickListener.onClick(holder.binding.root, accountHistoryItem)
        }
    }
    catch (e: IndexOutOfBoundsException) {
        e.printStackTrace()
    }
}

AccountHistoryFragement 클래스에서 OnAccountHistoryItemClickListener 인터페이스 구현

AccountHistoryItem 객체의 get...Links() 메소드들을 호출하여 AccountHistoryItemLink 리스트를 만들고요. 그것은 팝업 메뉴를 띄우기 위해 활용됩니다. 팝업 메뉴를 띄우기 위해 PopupMenu 객체를 생성합니다.

private val accountHistoryItemClickListener = object: AccountHistoryItemListAdapter.OnAccountHistoryItemClickListener {
    override fun onClick(itemView: View, accountHistoryItem: AccountHistoryItem) {
        val popupMenu = PopupMenu(activity, itemView)
        val accountHistoryItemLinks = accountHistoryItem.getLinkList()
        accountHistoryItemLinks.forEachIndexed { index, item ->
            popupMenu.menu.add(0, index, index, item.title)
        }
        popupMenu.setOnMenuItemClickListener { menuItem ->
            val link = accountHistoryItemLinks[menuItem.itemId]
            when (link.type) {
                "profile" -> {
                    val account = link.link.replace("@", "")
                    val action = AccountHistoryFragmentDirections.actionNavigationAccountHistoryToNavigationProfile(account)
                    findNavController().navigate(action)
                    setActivityActionBarTitle("Profile of @${link.link}")
                }
                "post" -> {
                    val linkElements = link.link.split("/")
                    val author = linkElements[0].replace("@", "")
                    val permlink = linkElements[1]
                    val action = AccountHistoryFragmentDirections.actionNavigationAccountHistoryToNavigationPost(
                        author, permlink
                    )
                    findNavController().navigate(action)
                    setActivityActionBarTitle("Posts of @${author}")
                }
                "wallet" -> {
                    val account = link.link.replace("@", "")
                    val action = AccountHistoryFragmentDirections.actionNavigationAccountHistoryToNavigationWallet(account)
                    findNavController().navigate(action)
                    setActivityActionBarTitle("Wallet of @${account}")
                }
            }
            true
        }

        if (accountHistoryItemLinks.isNotEmpty()) {
            popupMenu.show()
        }
    }
}

Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
Sort:  

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.

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


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Thank you, friend!
I'm @steem.history, who is steem witness.
Thank you for witnessvoting for me.
image.png
please click it!
image.png
(Go to https://steemit.com/~witnesses and type fbslo at the bottom of the page)

The weight is reduced because of the lack of Voting Power. If you vote for me as a witness, you can get my little vote.

Coin Marketplace

STEEM 0.04
TRX 0.32
JST 0.084
BTC 60911.74
ETH 1565.41
USDT 1.00
SBD 0.47