스팀 앱 - 개발 중: 사용자 히스토리 항목 클릭 (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)
안녕하세요.
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.
please click it!
(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.