【问题标题】:Kotlin - transferring data between classes using interfaceKotlin - 使用接口在类之间传输数据
【发布时间】:2019-03-20 09:53:38
【问题描述】:

我一直在 kotlin 中进行一些工作,其中包括一个带有回收器视图的复选框,现在我想添加一个“检查所有”按钮,但我在实现它时遇到了问题。

这里有一些代码:

MainActivity.kt(菜单项'check all'所在的位置):

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)
    }
}

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

【问题讨论】:

  • 可以加RecyclerAdapter代码吗?

标签: android kotlin interface


【解决方案1】:

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2016-06-08
    • 2023-03-19
    • 2011-02-14
    相关资源
    最近更新 更多