繁体   English   中英

如何从适配器中的片段中找到 function?

How to find a function from a fragment in an adapter?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个应用程序,在 MainFragment 中有一个 recyclesView 和 mainAdapter 本身,在 mainAdapter 中有一个按钮,当按下它时它应该改变颜色(我实现了),并且它应该改变数据库中的一个项目,并且我从 MainFragment 调用 function 时遇到问题,它会更改数据库中的项目,我不明白如何调用它,如果我编写 MainFragment.updateFavourites,则会出现 ViewModel 未初始化的错误,尽管它被初始化

它主要片段

class MainFragment : Fragment() {

private lateinit var mUserViewModel: UserViewModel
private val adapter = ListAdapter()

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    val view =  inflater.inflate(R.layout.fragment_main, container, false)

//        adapter
//        val adapter = ListAdapter() 
//        recyclerView
    val recyclerView = view.recyclerView

    recyclerView.adapter = adapter
    recyclerView.layoutManager = LinearLayoutManager(requireContext())

  //        UserViewModel
    mUserViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
    mUserViewModel.readAllData.observe(viewLifecycleOwner, Observer { user ->
        adapter.setData(user)
    })

    return view
}

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

    val buttonNewKep: FloatingActionButton = 
 view.findViewById(R.id.floatingActionButtonAddKeep)
    val buttonSearch: ImageView = view.findViewById(R.id.imageSearch)

    buttonNewKep.setOnClickListener {
        Navigation.findNavController(view).navigate(R.id.action_mainFragment_to_addFragment)
    }

    buttonSearch.setOnClickListener {
        Navigation.findNavController(view).navigate(R.id.action_mainFragment_to_searchFragment)
    }
}

  call its Function
fun updateFavourites(id: Int, title: String, subTitle: String, favourites: Boolean) {
    val update = User(id, title, subTitle, favourites)
    mUserViewModel.updateUser(update)
}

}

它主要适配器

class ListAdapter: RecyclerView.Adapter<ListAdapter.MyViewHolder>() {

private var userList = emptyList<User>()

lateinit var  mainFragment: MainFragment

class MyViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
    return MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.my_row, parent, false))
}

override fun getItemCount(): Int {
    return userList.size
}

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    val currentItem = userList[position]
    holder.itemView.textTitle.text = currentItem.title
    holder.itemView.textSubTitle.text = currentItem.subTitle


    if(currentItem.favourites) {
        holder.itemView.imageStar.setImageResource(R.drawable.ic_star_icon_select)
    } else {
        holder.itemView.imageStar.setImageResource(R.drawable.ic_star_icon)
    }

    holder.itemView.rowLayout.setOnClickListener {
        val action = MainFragmentDirections.actionMainFragmentToUpdateFragment(currentItem)
        holder.itemView.findNavController().navigate(action)

    }

    holder.itemView.imageStar.setOnClickListener {
        if(currentItem.favourites) {
            holder.itemView.imageStar.setImageResource(R.drawable.ic_star_icon)
             here I have to call the function, and pass there is an id and others, 
          including the modified favorites

        } else {
            holder.itemView.imageStar.setImageResource(R.drawable.ic_star_icon_select)

        }
    }
}

fun setData(user: List<User>){
    this.userList = user
    notifyDataSetChanged()
}

}

问题暂未有回复.您可以查看右边的相关问题.
4 如何从适配器调用片段

我想从适配器调用片段,但是在那个片段适配器中没有被调用,这是完全不同的片段。 SongListAdapter.java TopRatedFragment.java SingleVideoFragment.java 我想从SongsListAdapter调用Singl ...

6 如何从适配器访问片段?

我想检索搜索栏的值以将它们传输到适配器级别,以更新用户评估。 我有一个片段 EvalGroupFragment 和适配器 EvalGroupAdapter。 我不知道如何访问搜索栏的值。 非常感谢你的帮助。 这是我的 EvalGroupFragment 代码: 这是我的适配器代码:EvalGrou ...

7 如何从适配器获取字符串到片段?

嗯,我想将字符串从适配器解析为片段,我该怎么做? 因为我的应用程序上有一个空格字符串。 这是我适配器的代码 适配器 因此,大多数情况下,我的适配器代码将打开我的titlefragment,并使用pojo传递字符串,但是我没有在pojo上获取任何数据字符串,因此在这里查看我的 ...

8 如何从RecyclerView Adapter打开片段?

我想将数据从适配器传递到片段,因此基本上,当我尝试单击某个项目时,片段应该打开,但是,我的应用程序什么也没做。 那么我该如何解决呢? 适配器 我已经在发布之前更改了我的Activity,所以它进一步更改了onRecycleViewOnItemClickListener 主要 ...

9 如何从适配器类调用片段?

当我运行下面的代码时,会显示以下错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.support.v4.app.FragmentManager android.support.v7.app.AppCompatActivity ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM