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