Skip to content

Commit 9c34da1

Browse files
author
Daniel Novak
committed
Add base activity without a viewmodel. Add log in case view was not set.
1 parent 89c9011 commit 9c34da1

File tree

5 files changed

+56
-33
lines changed

5 files changed

+56
-33
lines changed

library/src/main/java/eu/inloop/viewmodel/AbstractViewModel.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.support.annotation.NonNull;
77
import android.support.annotation.Nullable;
88
import android.support.v4.app.Fragment;
9+
import android.util.Log;
910

1011
public abstract class AbstractViewModel<T extends IView> {
1112

@@ -15,6 +16,8 @@ public abstract class AbstractViewModel<T extends IView> {
1516
@Nullable
1617
private T mView;
1718

19+
private boolean mBindViewWasCalled;
20+
1821
void setUniqueIdentifier(@NonNull final String uniqueIdentifier) {
1922
mUniqueIdentifier = uniqueIdentifier;
2023
}
@@ -44,6 +47,7 @@ public void onCreate(@Nullable Bundle arguments, @Nullable Bundle savedInstanceS
4447
}
4548

4649
public void bindView(@NonNull T view) {
50+
mBindViewWasCalled = true;
4751
mView = view;
4852
}
4953

@@ -68,7 +72,9 @@ public void onStop() {
6872

6973
@SuppressWarnings("EmptyMethod")
7074
public void onStart() {
71-
75+
if (mView == null && !mBindViewWasCalled) {
76+
Log.e("AndroidViewModel", this.getClass().getSimpleName() + " - no view associated. You probably did not call setModelView() in your Fragment or Activity");
77+
}
7278
}
7379

7480
/**

library/src/main/java/eu/inloop/viewmodel/base/ViewModelBaseActivity.java

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,17 @@
33
import android.os.Bundle;
44
import android.support.annotation.NonNull;
55
import android.support.annotation.Nullable;
6-
import android.support.v7.app.AppCompatActivity;
76

87
import eu.inloop.viewmodel.AbstractViewModel;
98
import eu.inloop.viewmodel.IView;
10-
import eu.inloop.viewmodel.IViewModelProvider;
119
import eu.inloop.viewmodel.ViewModelHelper;
12-
import eu.inloop.viewmodel.ViewModelProvider;
1310

14-
public abstract class ViewModelBaseActivity<T extends IView, R extends AbstractViewModel<T>> extends AppCompatActivity implements IView, IViewModelProvider {
11+
public abstract class ViewModelBaseActivity<T extends IView, R extends AbstractViewModel<T>> extends ViewModelBaseEmptyActivity implements IView {
1512

1613
private final ViewModelHelper<T, R> mViewModeHelper = new ViewModelHelper<>();
17-
private ViewModelProvider mViewModelProvider;
1814

1915
@Override
2016
protected void onCreate(@Nullable final Bundle savedInstanceState) {
21-
//This code must be execute prior to super.onCreate()
22-
mViewModelProvider = ViewModelProvider.newInstance(this);
2317
super.onCreate(savedInstanceState);
2418
mViewModeHelper.onCreate(this, savedInstanceState, getViewModelClass(), getIntent().getExtras());
2519
}
@@ -35,12 +29,6 @@ public void setModelView(@NonNull final T view) {
3529

3630
public abstract Class<R> getViewModelClass();
3731

38-
@Override
39-
@Nullable
40-
public Object onRetainCustomNonConfigurationInstance() {
41-
return mViewModelProvider;
42-
}
43-
4432
@Override
4533
public void onSaveInstanceState(@NonNull final Bundle outState) {
4634
super.onSaveInstanceState(outState);
@@ -57,9 +45,6 @@ public void onStart() {
5745
public void onStop() {
5846
super.onStop();
5947
mViewModeHelper.onStop();
60-
if (isFinishing()) {
61-
mViewModelProvider.removeAllViewModels();
62-
}
6348
}
6449

6550
@Override
@@ -74,8 +59,4 @@ public R getViewModel() {
7459
return mViewModeHelper.getViewModel();
7560
}
7661

77-
@Override
78-
public ViewModelProvider getViewModelProvider() {
79-
return mViewModelProvider;
80-
}
8162
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package eu.inloop.viewmodel.base;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.Nullable;
5+
import android.support.v7.app.AppCompatActivity;
6+
7+
import eu.inloop.viewmodel.IViewModelProvider;
8+
import eu.inloop.viewmodel.ViewModelProvider;
9+
10+
/**
11+
* All your activities must extend this activity - even in case your activity has no viewmodel. The fragment viewmodels are using the {@link IViewModelProvider}
12+
* interface to get the {@link ViewModelProvider} from the current activity.
13+
* You can copy this implementation in case you don't want to extend this class.
14+
*/
15+
public abstract class ViewModelBaseEmptyActivity extends AppCompatActivity implements IViewModelProvider {
16+
17+
private ViewModelProvider mViewModelProvider;
18+
19+
@Override
20+
protected void onCreate(@Nullable final Bundle savedInstanceState) {
21+
//This code must be execute prior to super.onCreate()
22+
mViewModelProvider = ViewModelProvider.newInstance(this);
23+
super.onCreate(savedInstanceState);
24+
}
25+
26+
@Override
27+
@Nullable
28+
public Object onRetainCustomNonConfigurationInstance() {
29+
return mViewModelProvider;
30+
}
31+
32+
@Override
33+
public void onStop() {
34+
super.onStop();
35+
if (isFinishing()) {
36+
mViewModelProvider.removeAllViewModels();
37+
}
38+
}
39+
40+
@Override
41+
public ViewModelProvider getViewModelProvider() {
42+
return mViewModelProvider;
43+
}
44+
}

sample/src/main/java/eu/inloop/viewmodel/sample/activity/MainActivity.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44

55
import butterknife.ButterKnife;
66
import eu.inloop.viewmodel.base.ViewModelBaseActivity;
7+
import eu.inloop.viewmodel.base.ViewModelBaseEmptyActivity;
78
import eu.inloop.viewmodel.sample.R;
89
import eu.inloop.viewmodel.sample.fragment.UserListFragment;
910

1011

11-
public class MainActivity extends ViewModelBaseActivity {
12+
public class MainActivity extends ViewModelBaseEmptyActivity {
1213

1314
@Override
1415
protected void onCreate(Bundle savedInstanceState) {
@@ -21,9 +22,4 @@ protected void onCreate(Bundle savedInstanceState) {
2122
}
2223
}
2324

24-
@Override
25-
public Class getViewModelClass() {
26-
return null;
27-
}
28-
2925
}

sample/src/main/java/eu/inloop/viewmodel/sample/activity/ViewPagerActivity.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
import android.support.v4.view.ViewPager;
88

99
import eu.inloop.viewmodel.base.ViewModelBaseActivity;
10+
import eu.inloop.viewmodel.base.ViewModelBaseEmptyActivity;
1011
import eu.inloop.viewmodel.sample.R;
1112
import eu.inloop.viewmodel.sample.fragment.PagerFragment;
1213

13-
public class ViewPagerActivity extends ViewModelBaseActivity {
14+
public class ViewPagerActivity extends ViewModelBaseEmptyActivity {
1415

1516
@Override
1617
protected void onCreate(Bundle savedInstanceState) {
@@ -21,11 +22,6 @@ protected void onCreate(Bundle savedInstanceState) {
2122
viewPager.setAdapter(new TestPagerAdapter(getSupportFragmentManager()));
2223
}
2324

24-
@Override
25-
public Class getViewModelClass() {
26-
return null;
27-
}
28-
2925
private final static class TestPagerAdapter extends FragmentStatePagerAdapter {
3026
public TestPagerAdapter(FragmentManager fm) {
3127
super(fm);

0 commit comments

Comments
 (0)