我有一個Bottom sheet片段,它有兩個片段,其中一個片段有一個回收器視圖,里面有一個按鈕。我需要的是,如果用戶點擊該按鈕,它將刷到第二個片段,并將文本視圖的標題傳遞給它。一切都作業得很好,但我不知道如何使用我的編碼理念,如果這是有可能的。我試圖尋找答案,但沒有一個對我有用。
我所需要的是
- 從一個按鈕中打開一個片段,該片段在一個回收器視圖中 。
- 當另一個片段被打開時,我需要顯示一個我從回收器視圖中傳來的標題
我需要的是:
我需要的是:
我需要的是:
我需要的是:
我需要的是
希望能得到任何幫助/請使用java或kotlin
我的回收器視圖配接器 class tvTitleAdapter (val context: Context,val TITLE_LIST : ArrayList<TvTitlesViewModel> )
: RecyclerView.Adapter<tvTitleAdapter.ViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int)。) ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R。 layout.tv_titles_design, parent, false)
回傳ViewHolder(view)
}
override fun getItemCount(): Int {
return TITLE_LIST.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val tvShow: TvTitlesViewModel = TITLE_LIST[position] 。
持有人.titleShow.text = tvShow.title
持有人.description.text = tvShow.description
holder.showImage.setImageResource(tvShow.title_image)
holder.tvTitleExpand.setOnClickListener {
holder.description.visibility = View.VISIBLE。
holder.showImage.visibility = View.VISIBLE。
holder.tvTitleButton.visibility = View.VisIBLE。
}
holder.tvTitleButton.setOnClickListener {
當(position){
0->{
// 我需要刷到另一個片段,并從這里傳遞資料給它,如果
這是有可能的
}
}
}
}
class ViewHolder(Itemview : View) 。RecyclerView.ViewHolder(Itemview){
val titleShow = itemView.findViewById<TextView>(R.id.TVTitle)
val description = itemView.findViewById<TextView>(R.id.TVDesription)
val showImage = itemView.findViewById<ImageView>(R.id.TVImage)
var tvTitleExpand = itemView.findViewById<CardView>(R.id.tvTitleExpand)
val tvTitleButton = itemView.findViewById<Button>(R.id.tvTitleButton) // 這是在回收器視圖中的一個按鈕
}
我的片段
class TvTitlesFragment : Fragment() {
val TV_TITLE : ArrayList< TvTitlesViewModel> = ArrayList()
override fun onCreate(sedInstanceState: Bundle? ){
super.onCreate(s savedInstanceState)
}
override fun onCreateView(
膨脹器。LayoutInflater, container: ViewGroup?
savedInstanceState。Bundle?
)。視圖? {
//為這個片段充氣布局。
return inflater.inflate(R.layout.fragment_tv_titles, container, false)
}
override fun onViewCreated(view。View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val adapter = tvTitleAdapter(context!!,TV_TITLE)
tvTitles.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
tvTitles.setHasFixedSize(true)
tvTitles.adapter = adapter
tvShowTitles()
}
private fun tvShowTitles(){
TV_TITLE.add(TvTitlesViewModel(R.drawable. abdelbasset_abdessamad, "?????? ??? ????? ???????"/span>, "?????? ??? ????? ??????? ?? ????? ????? ??? ??????? ???? ???, ?? ?? ??? ???? ??? ?? ??? 1960 ? ?????? ??? ??? 1992 ?"/span>))
TV_TITLE.add(TvTitlesViewModel(R.drawable. abdelbasset_abdessamad, "?????? ??? ????? ???????"/span>, "?????? ??? ????? ??????? ?? ????? ????? ??? ??????? ???? ???, ?? ?? ??? ???? ??? ?? ??? 1960 ? ?????? ??? ??? 1992 ?"/span>))
TV_TITLE.add(TvTitlesViewModel(R.drawable. abdelbasset_abdessamad, "?????? ??? ????? ???????"/span>, "?????? ??? ????? ??????? ?? ????? ????? ??? ??????? ???? ???, ?? ?? ??? ???? ??? ?? ??? 1960 ? ?????? ??? ??? 1992 ?"/span>))
TV_TITLE.add(TvTitlesViewModel(R.drawable. abdelbasset_abdessamad, "?????? ??? ????? ???????"/span>, "?????? ??? ????? ??????? ?? ????? ????? ??? ??????? ???? ???, ?? ?? ??? ???? ??? ?? ??? 1960 ? ?????? ??? ??? 1992 ?"/span>))
TV_TITLE.add(TvTitlesViewModel(R.drawable. abdelbasset_abdessamad, "?????? ??? ????? ???????"/span>, "?????? ??? ????? ??????? ?? ????? ????? ??? ??????? ???? ???, ?? ?? ??? ???? ??? ?? ??? 1960 ? ?????? ??? ??? 1992 ?"/span>))
TV_TITLE.add(TvTitlesViewModel(R.drawable. abdelbasset_abdessamad, "?????? ??? ????? ???????"/span>, "?????? ??? ????? ??????? ?? ????? ????? ??? ??????? ???? ???, ?? ?? ??? ???? ??? ?? ??? 1960 ? ?????? ??? ??? 1992 ?"/span>)
P.C. 我沒有在我的第二個片段中添加任何代碼
這是我的回收器視圖的照片如果用戶點擊按鈕,我需要將標題值和滑動傳給第二個片段
我的第二個片段圖片
uj5u.com熱心網友回復:
使用kotlin,你可以使用高階函式來呼叫回呼,而不是像java那樣創建介面。
在配接器的建構式中創建一個高階函式。然后當你設定點擊時,你就可以呼叫并在視圖中獲得被呼叫的資料。如下所示:
//你應該把類名改為大寫。如`TvTitleAdapter`。
class tvTitleAdapter (
val context: 語境。
val TITLE_LIST : ArrayList<TvTitlesViewModel> 。
private val onClick: ((tvTitleName: String) -> Unit) ? = null //傳遞你想要的param。在這里,我嘗試傳遞名稱為tvTitleName的字串。
) : RecyclerView.Adapter<tvTitleAdapter.ViewHolder>() {
override fun onBindViewHolder( holder: ViewHolder, position: Int) {
...
holder.tvTitleButton.setOnClickListener {
when(position){
0 -> {
onClick?.invoke(`your title`) //pass your title in invoke.
}
else -> return@setOnClickListener }
}
}
}
在TvTitleAdapter的初始化中,你宣告了onClick的引數。當你呼叫invoke()時,它將監聽回呼。
class TvTitlesFragment : Fragment() {
override fun onViewCreated(view。View, savedInstanceState: Bundle?) {
...
val adapter = tvTitleAdapter(
requireContext(),
TV_TITLE,
onClick = { tvTitleName ->
//這段代碼用`newInstance()`函式傳遞的`tvTitleName`打開了`第二個片段`。
requireActivity().supportFragmentManager
.beginTransaction()
.替換(R.id.your_fragment_container, SecondFragment.newInstance(tvTitleName))
.提交()
}
)
}
}
class SecondFragment : Fragment( ) {
...
override fun onViewCreated(view。View, savedInstanceState: Bundle?) {
...
//從`TvTitlesFragment`中獲取資料。
val tvTitleName = argument?.getString(KEY_TV_TITLE_NAME)
//將資料設定為你的標題。
binding.tvTitle.text = tvTitleName
}
companion object {
private const val KEY_TV_TITLE_NAME = "KEY_TV_TITLE_NAME"/span>
//創建帶有bundle的`SecondFragment',這樣你就可以把資料從某些片段發送到`SecondFragment'。
fun newInstance(tvTitleName: String) : SecondFragment = SecondFragment() .apply{
val bundle = bundleOf(KEY_TV_TITLE_NAME to tvTitleName)
arguments = bundle
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/318400.html
標籤:
上一篇:如何在ActionbarDrawerToggle的位置上設定退格按鈕以導航到前一個片段?
下一篇:與協議方法型別相同的列舉


