Kotlin — передача данных между классами с использованием интерфейса

#android #kotlin #interface

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

Теперь, я попытался создать интерфейс между этими двумя, но я не смог понять, как мне это сделать?

Комментарии:

1. Не могли бы вы, пожалуйста, добавить RecyclerAdapter код?

Ответ №1:

используйте lambda и удалите static. Смотрите https://dev.to/onmyway133/communication-between-fragment-and-activity-o60