Как изменить Фабрику Данных Адаптера по клику? - PullRequest
0 голосов
/ 10 июня 2019

Я хочу сделать такое приложение, как File Manager. У меня уже есть исходные папки, и я сохраняю их в фабрике данных (FolderDataFactory, PrivateFolderDataFactory и CheckFolderDataFactory) с помощью KDelegateAdapter. Что я хочу, это открыть папки, нажав на них. Для этого я собираюсь изменить фактор данных адаптера, установив их. Но я не мог. Я иду двумя путями.

Первый способ, которым я использовал лямбда-метод для обработки события клика. Но я не мог написать это логически. (ниже я положил код) Второй способ, который я пытался использовать метод переопределения в другом классе, передавая глобальную целочисленную переменную, чтобы указать состояние, по какой папке щелкают. Он работает без ошибок, но не устанавливает Data Factory для адаптера. (включенный код)

Первый путь:

    //some code

    val clickTest: (FolderModel) -> Unit = {
           when {
               (it.title == "Личные документы") -> { adapterFolders.swapData(PrivateFolderDataFactory().generateFolderList()) 
//cannot resolve adapterFolders. Yes, it is obvious. But anyway how to pass //it?}
               (it.title == "Чеки") -> { adapterFolders.swapData(CheckFolderDataFactory().generateFolderList()) }
           } }

val adapterFolders = DiffUtilCompositeAdapter.Builder()
            .add(FolderDelegateAdapter(clickTest))
            .build()
        rv_folders.layoutManager = GridLayoutManager(this, 3)
        rv_folders.adapter = adapterFolders
        adapterFolders.swapData(FolderDataFactory().generateFolderList())

Второй путь:

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

    //some code

    var openFolder: Int = -1
    val folderState = FolderState()

    //some code

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

    //some code

    val clickTest: (FolderModel) -> Unit = {
           when {
               (it.title == "Личные документы") -> { openFolder = 0 }
               (it.title == "Чеки") -> { openFolder = 1 }
           openFolder.toast(this)  //variable is changing
           } }

val adapterFolders = DiffUtilCompositeAdapter.Builder()
            .add(FolderDelegateAdapter(clickTest))
            .build()
        rv_folders.layoutManager = GridLayoutManager(this, 3)
        rv_folders.adapter = adapterFolders
        adapterFolders.swapData(FolderDataFactory().generateFolderList())

        folderState.folderState(openFolder, adapterFolders)

        //some code }
...