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>
    }
}
0
wuujcik 19 grudzień 2019, 15:12
Wbudowana baza danych w pamięci, taka jak H2 może dostarczyć, jest dość łatwa.
 – 
Joop Eggen
19 grudzień 2019, 15:23
Możesz być bardziej dokładny? Przechodzę do RecyclerViewer List<Pair<String?, List<Object>>>, a RecyclerViewer pobiera pairData.first (czyli String?) i wyświetla go jako tytuł widoku i potrzebuję pairData.second (czyli List<Object>) do przekazania do tego komponentu interfejsu użytkownika jako DataSource<Int, Object>
 – 
wuujcik
19 grudzień 2019, 16:02
Przepraszam, zapomniałem, że to Android, nie ma wystarczającego doświadczenia. Na szczęście jest już odpowiedź.
 – 
Joop Eggen
19 grudzień 2019, 16:14

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

0
Niekam 19 grudzień 2019, 16:07