Skip to content

Instantly share code, notes, and snippets.

public class YourViewModel extends ViewModel {
//YOUR VIEWMODEL CODE
}
public class QueryViewModelArc extends ViewModel {
private SearchShows searchShows;
@Inject
public QueryViewModelArc(SearchShows searchShows) {
this.searchShows = searchShows;
}
//Viewmodel stuff
}
@paulocns
paulocns / fragment.java
Last active August 4, 2018 22:21
fragment.java
public class QueryFragment extends BaseFragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
QueryViewModelArc queryViewModelArc =
ViewModelProviders.of(this, getViewModelFactory()).get(QueryViewModelArc.class);
}
}
public abstract class BaseFragment extends Fragment {
@Inject
ProjectViewModelFactory viewModelFactory;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
DevCampApplication app = (DevCampApplication) getActivity().getApplication();
public class ProjectViewModelFactory implements ViewModelProvider.Factory {
private final ArrayMap<Class, Callable<? extends ViewModel>> creators;
public ProjectViewModelFactory(ViewModelSubComponent viewModelSubComponent) {
creators = new ArrayMap<>();
creators.put(HomeFragmentViewModel.class, () -> viewModelSubComponent.homeFragmentViewModel());
creators.put(QueryViewModelArc.class, () -> viewModelSubComponent.queryViewModelArc());
}
@Override
@Subcomponent
public interface ViewModelSubComponent {
@Subcomponent.Builder
interface Builder {
ViewModelSubComponent build();
}
HomeFragmentViewModel homeFragmentViewModel();
QueryViewModelArc queryViewModelArc();
}
@Singleton
@Component(modules = {
ApplicationModule.class,
NetworkModule.class,
ShowRepositoryModule.class,
ResourceRepositoryModule.class
})
public interface ApplicationComponent {
// expose to sub graphs
@Module(subcomponents = {ViewModelSubComponent.class})
public class ApplicationModule {
@Singleton
@Provides
ProjectViewModelFactory provideViewModelFactory(
ViewModelSubComponent.Builder viewModelSubComponent) {
return new ProjectViewModelFactory(viewModelSubComponent.build());
}
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="viewModel"
type="package.QueryViewModelArc"/>
</data>
<FrameLayout
public class QueryViewModelArc extends ViewModel {
private MutableLiveData<String> query = new MutableLiveData<>();
private MutableLiveData<Boolean> searchEnabled = new MutableLiveData<>();
private SearchShows searchShows;
@Inject
public QueryViewModelArc(SearchShows searchShows) {