android - Kotlin - 使用接口在类之间传输数据
问题描述
我一直在研究 kotlin 中的一些东西,其中包括一个带有回收器视图的复选框,现在我想添加一个“检查全部”按钮,但我在实现它时遇到了问题。
这是一些代码:
MainActivity.kt(菜单项“检查所有”在哪里):
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val fragmentList: List<Fragment> = listOf(
HomeFragment.newInstance(),
DataFragment.newInstance()
)
binding.viewPager.adapter = ViewPagerAdapter(supportFragmentManager, fragmentList)
}
// Options Menu
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.main_menu, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
return when (item?.itemId) {
R.id.action_selectAll -> true
else -> super.onOptionsItemSelected(item)
}
// Options menu end
}
interface UpdateList {
fun updateCheckList(list: MutableList<String>)
}
}
HomeFragment.kt ,我希望执行操作的片段:
class HomeFragment : Fragment(), FragmentPresenterConstructor.View, RecyclerAdapter.RecyclerAdapterClickListener, MainActivity.UpdateList {
companion object {
fun newInstance() = HomeFragment()
}
private lateinit var pm: PackageManager
private lateinit var recyclerAdapter: RecyclerAdapter
private val presenter = FragmentPresenter(this)
private val appList = mutableListOf<AppData>()
private val checkBoxList = mutableListOf<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
recyclerAdapter = RecyclerAdapter(activity!!, appList, this)
pm = activity!!.packageManager
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View = inflater.inflate(R.layout.home_fragment, container, false)
val recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
recyclerView.layoutManager = LinearLayoutManager(activity)
recyclerView.adapter = recyclerAdapter
return view
}
override fun onResume() {
super.onResume()
presenter.getData(pm)
}
override fun updateUI(data: List<AppData>) {
appList.clear()
appList.addAll(data)
recyclerAdapter.notifyDataSetChanged()
}
override fun onItemClicked(isChecked: Boolean, packageName: String) {
if (isChecked) {
checkBoxList.add(packageName)
} else {
checkBoxList.remove(packageName)
}
}
override fun updateCheckList(list: MutableList<String>) {
checkBoxList.clear()
checkBoxList.addAll(list)
}
}
现在,我试图在这两者之间建立一个接口,但我无法弄清楚,我该如何实现呢?
解决方案
推荐阅读
- flutter - 颤动:将小部件对齐/固定到行的底部
- angular - 为什么 Angular 内置指令不适用于单个组件?
- reactjs - 如何从“上传文件”组件中提取文件名并将它们显示在 UI 上的列表中?
- linux - Ubuntu - 我无法使用 sudo 启动应用程序和运行命令
- json - 仅保留具有字符串值的字段
- php - 浏览器重新启动时删除 Httponly Cookie
- c# - 有没有一种简单的方法可以摆脱这个 IF 循环?
- json - 解决这个简单的(?)JSONPath
- ios - muteLocalVideoStream 没有将agora中的视频静音
- html - 在不使用 CSS 位置的情况下重叠 PNG 图像:相对