Skip to content

Instantly share code, notes, and snippets.

@ibrahimsn98
Last active August 19, 2018 15:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ibrahimsn98/a38674b73ba1d0fc4c417dc88c218b35 to your computer and use it in GitHub Desktop.
Save ibrahimsn98/a38674b73ba1d0fc4c417dc88c218b35 to your computer and use it in GitHub Desktop.
android-mvvm-with-dagger-2
public class ListFragment extends BaseFragment implements RepoSelectedListener {
@BindView(R.id.recyclerView) RecyclerView listView;
@BindView(R.id.tv_error) TextView errorTextView;
@BindView(R.id.loading_view) View loadingView;
@Inject ViewModelFactory viewModelFactory;
private ListViewModel viewModel;
@Override
protected int layoutRes() {
return R.layout.screen_list;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
viewModel = ViewModelProviders.of(this, viewModelFactory).get(ListViewModel.class);
listView.addItemDecoration(new DividerItemDecoration(getBaseActivity(), DividerItemDecoration.VERTICAL));
listView.setAdapter(new RepoListAdapter(viewModel, this, this));
listView.setLayoutManager(new LinearLayoutManager(getContext()));
observableViewModel();
}
@Override
public void onRepoSelected(Repo repo) {
DetailsViewModel detailsViewModel = ViewModelProviders.of(getBaseActivity(), viewModelFactory).get(DetailsViewModel.class);
detailsViewModel.setSelectedRepo(repo);
getBaseActivity().getSupportFragmentManager().beginTransaction().replace(R.id.screenContainer, new DetailsFragment())
.addToBackStack(null).commit();
}
private void observableViewModel() {
viewModel.getRepos().observe(this, repos -> {
if(repos != null) listView.setVisibility(View.VISIBLE);
});
viewModel.getError().observe(this, isError -> {
if (isError != null) if(isError) {
errorTextView.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
errorTextView.setText("An Error Occurred While Loading Data!");
}else {
errorTextView.setVisibility(View.GONE);
errorTextView.setText(null);
}
});
viewModel.getLoading().observe(this, isLoading -> {
if (isLoading != null) {
loadingView.setVisibility(isLoading ? View.VISIBLE : View.GONE);
if (isLoading) {
errorTextView.setVisibility(View.GONE);
listView.setVisibility(View.GONE);
}
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment