Владелец жизненного цикла в ViewModel - Android Studio - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь реализовать ViewModel в приложении, которое получает некоторые данные из Firestore, используя FirestorepagingAdapter, и отображает их в виде реселлера. Я уже получаю все данные и отображаю их, но все еще не использую ViewModel, все это на MainActivity

Я пытаюсь переместить код, который создает опции Firestorepaging, в модель представления и в моей MainActivity, Просто создайте адаптер и установите его на просмотр. Но FirestorePagingOptions.Builder должен установить LifecycleOwner, и я не знаю, как получить его в моей ViewModel, или, может быть, я вообще не должен был делать это в ViewModel, я довольно потерян с этими ViewModel, поэтому если у кого-то есть предложения, я ценю. Большое спасибо.

Вот мой оригинальный код для MainActivity (еще не изменен для получения данных из Viewmodel)

public class ListaEmpresasActivity extends AppCompatActivity {

    private FirebaseFirestore firebaseDB;
    private RecyclerView recyclerViewListaEmpresas;
    private FirestorePagingAdapter adapter;
    private boolean viewChanged;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_empresas);

        recyclerViewListaEmpresas = findViewById(R.id.activity_main_lista_empresas);
        firebaseDB = FirebaseFirestore.getInstance();
        FirestorePagingOptions<EmpresaLista> options = configuraPaginacaoInicial();

        adapter = new ListaEmpresasAdapter(options);
        configuraRecyclerView(adapter);
    }

    private FirestorePagingOptions<EmpresaLista> configuraPaginacaoInicial() {
        Query query = firebaseDB.collection("Lista_Empresas").orderBy("id");
        return configuraOpcoesPaginacao(query);
    }

    private FirestorePagingOptions<EmpresaLista> configuraOpcoesPaginacao(Query query) {
        PagedList.Config config = new PagedList.Config.Builder()
                .setEnablePlaceholders(false)
                .setPrefetchDistance(10)
                .setPageSize(20)
                .build();

        return new FirestorePagingOptions.Builder<EmpresaLista>()
                .setLifecycleOwner(this)
                .setQuery(query, config, EmpresaLista.class)
                .build();
    }

    private void configuraRecyclerView(FirestorePagingAdapter adapter) {
        recyclerViewListaEmpresas.setHasFixedSize(true);
        recyclerViewListaEmpresas.setLayoutManager(new LinearLayoutManager(this));
        recyclerViewListaEmpresas.setAdapter(this.adapter);
    }

И код на моей ViewModel

public class ListaEmpresasViewModel extends ViewModel {
    private MutableLiveData<FirestorePagingOptions<EmpresaLista>> options;
    private FirebaseFirestore firebaseDB;

    public LiveData<FirestorePagingOptions<EmpresaLista>> getOptions() {
        firebaseDB = FirebaseFirestore.getInstance();
        options = configuraPaginacaoInicial();
        return options;
    }

    private MutableLiveData<FirestorePagingOptions<EmpresaLista>> configuraPaginacaoInicial() {
        Query query = firebaseDB.collection("Lista_Empresas").orderBy("id");
        return configuraOpcoesPaginacao(query);
    }

    private MutableLiveData<FirestorePagingOptions<EmpresaLista>> configuraOpcoesPaginacao(Query query) {
        PagedList.Config config = new PagedList.Config.Builder()
                .setEnablePlaceholders(false)
                .setPrefetchDistance(10)
                .setPageSize(20)
                .build();

        return new FirestorePagingOptions.Builder<EmpresaLista>()
                .setLifecycleOwner()
                .setQuery(query, config, EmpresaLista.class)
                .build();
    }
}

...