首页 > 解决方案 > 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)
    }
}

现在,我试图在这两者之间建立一个接口,但我无法弄清楚,我该如何实现呢?

标签: androidkotlininterface

解决方案



推荐阅读