Mam komponent UI, który akceptuje LiveData<PagedList<T>>
, ale w jednym przypadku muszę go użyć do danych przekazywanych bezpośrednio z RecycleViewer (RecycleViewer tworzy outpus w strukturze List<Object>
). Mogę łatwo zmapować to na Map<Int, Object>
, ale Mapa nie może być przesłana do źródła danych, więc muszę jakoś przekonwertować ją na DataSource<Int, Object>
lub bezpośrednio na <PagedList<Object>>
Próbowałem poniżej, ale niestety nie działa -> błąd polega na tym, że nie można przesłać MutableMap do DataSource. Jakieś pomysły?
class DataSourceFactory(
val data: List<Object>
) : DataSourceFactory<Object>() {
override fun create(): DataSource<Int, Object> {
val mappedData = mutableMapOf<Int, Object>()
var index = 0
for (object in data) {
mappedData[index] = object
index = +1
}
return mappedData as DataSource<Int, Object>
}
}
1 odpowiedź
Przede wszystkim w Kotlinie nie ma Obiektu, powinieneś użyć Any. Pojawia się błąd, ponieważ DataSource nie implementuje interfejsu Map. Jeśli nie chcesz dodawać interfejsu Map do DataSource, możesz zrobić coś takiego:
override fun create(): DataSource<Int, Any> {
val dataSource = DataSource<Int, Any>()
data.mapIndexed { index, any -> dataSource.put(index, any) }
return dataSource
}
Po prostu dostosuj metodę, aby dodać elementy do DataSource - użyłem w tym przykładzie
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].
List<Pair<String?, List<Object>>>
, a RecyclerViewer pobiera pairData.first (czyliString?
) i wyświetla go jako tytuł widoku i potrzebuję pairData.second (czyliList<Object>
) do przekazania do tego komponentu interfejsu użytkownika jakoDataSource<Int, Object>