Android 正在从活动更新RecyclerView片段适配器

Android 正在从活动更新RecyclerView片段适配器,android,android-fragments,Android,Android Fragments,我有一个main活动,里面有Fragment和RecyclerView。片段以“supportFragmentManager.beginTransaction()启动 .add“如您在MainActivity代码中看到的。MainActivity被注册到一些改变moviesArrayList的回调中,当它发生时,我需要用新的moviesArrayList更新Frgamnet并重新加载适配器。什么是合适的方法?再次删除和添加片段?更新实例?通过回调将数据发送到片段 主要活动: overri

我有一个main活动,里面有
Fragment
RecyclerView
。片段以“supportFragmentManager.beginTransaction()启动 .add“如您在MainActivity代码中看到的。MainActivity被注册到一些改变moviesArrayList的回调中,当它发生时,我需要用新的moviesArrayList更新Frgamnet并重新加载适配器。什么是合适的方法?再次删除和添加片段?更新实例?通过回调将数据发送到片段

主要活动:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)

        var moviesArrayList: ArrayList<Movie>? = ArrayList()

        //moviesArrayList //Some initializtion here

        if (savedInstanceState == null) {
            supportFragmentManager.beginTransaction()
                .add(R.id.container, ListFragment.newInstance(moviesArrayList))
                .commitNow()
        }
    }
override-fun-onCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.main_活动)
var moviesaraylist:ArrayList?=ArrayList()
//moviesArrayList//这里有一些初始化
如果(savedInstanceState==null){
supportFragmentManager.beginTransaction()
.add(R.id.container,ListFragment.newInstance(moviesArrayList))
.commitNow()
}
}
列表片段:

class ListFragment : Fragment() {

private lateinit var  moviesArrayList: ArrayList<Movie>


interface OnFragmentInteractionListener {
    fun onFragmentInteraction(movie: Movie)
    fun onFragmentInteraction()
}

override fun onAttach(context: Context) {
    super.onAttach(context)
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
    val view = inflater.inflate(R.layout.fragment_list2, container, false)

    val listView = view.findViewById<RecyclerView>(R.id.list2)

    listView.adapter = MyMovieRecyclerViewAdapter(moviesArrayList,object : OnItemClickListener {
        override fun onItemClicked(movie: Movie) {
            //Some on click happening
        }
    })

    return view
}

companion object {
    @JvmStatic
    fun newInstance(movies: ArrayList<Movie>?) = ListFragment().apply {
        if (movies != null) {
            moviesArrayList = movies //init moviesArrayList
        }
    }
}
类ListFragment:Fragment(){
私有lateinit var moviesArrayList:ArrayList
FragmentInteractionListener接口{
碎片互动的乐趣(电影:电影)
有趣的片段交互()
}
重写转速表(上下文:上下文){
super.onAttach(上下文)
}
覆盖创建视图(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图{
val视图=充气机。充气(R.layout.fragment_list2,容器,错误)
val listView=view.findViewById(R.id.list2)
listView.adapter=MyMovieRecyclServiceAdapter(moviesArrayList,对象:OnItemClickListener{
已单击(电影:电影){
//一些点击事件正在发生
}
})
返回视图
}
伴星{
@JvmStatic
有趣的新实例(电影:ArrayList?=ListFragment()。应用{
如果(电影!=null){
moviesArrayList=movies//init moviesArrayList
}
}
}

}

当您感觉到您简单调用的列表中有变化时:

adapter.notifyDataSetChanged()

这应该会更新recyclerview

这不是问题,为什么不呢?更改列表后,您将更新将显示新列表的适配器。问题不是如何更新适配器。问题是如何用新数据更新片段。