Я хочу сделать такое приложение, как 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 }