1

The codes below runs in an android emulator with Android version SDK 16. But somehow when it runs on the emulator with Android version >21, DataBinding and Realm savings doesn't get triggered..

How should I be dealing with Android versioning?

Is it because the rendered UI differs in different android versions so DataBinding wouldn't have worked either?

This code here is the ViewModel

@PerFragment
public class OnboardDOBViewModel extends BaseHelperViewModel<BaseUserView> implements IOnboardDOBViewModel {

private String TAG = getClass().getSimpleName();
private HelperRepo mHelperRepo;
private UserRepo mUserRepo;
private Helper mHelper;

public final ObservableField<Integer> datePicker = new ObservableField<>();
public final ObservableField<Integer> monthPicker = new ObservableField<>();
public final ObservableField<Integer> yearPicker = new ObservableField<>();

public ReadOnlyField dobSelected;

private CompositeDisposable mCompositeDisposable = new CompositeDisposable();

@Inject
public OnboardDOBViewModel(@AppContext Context context, UserRepo userRepo, HelperRepo helperRepo) {
    super(context, userRepo, helperRepo);
    Log.d(TAG, "OnboardDOBViewModel: ");
    this.mUserRepo = userRepo;
    this.mHelperRepo = helperRepo;
}

@Override
public void attachView(BaseUserView view, @Nullable Bundle savedInstanceState) {
    super.attachView(view, savedInstanceState);
    Log.d(TAG, "attachView");

    mHelper = mHelperRepo.getByUser("user.id", mUserRepo.getCurrentUser(), false);

    if (mHelper != null) {
        Calendar c = Calendar.getInstance();
        yearPicker.set(c.get(Calendar.YEAR)-23);
        monthPicker.set(c.get(Calendar.MONTH));
        datePicker.set(c.get(Calendar.DAY_OF_MONTH));
    }

    Observable<String> dobSelected = Observable.combineLatest(
            Utils.toObservable(monthPicker),
            Utils.toObservable(datePicker),
            Utils.toObservable(yearPicker),
            (integer, integer2, integer3) -> {

                String dobSelected1 = String.valueOf(monthPicker.get() + 1) + "-" +
                        datePicker.get().toString() + "-" +
                        yearPicker.get().toString();
                Log.d(TAG, "apply: " + dobSelected1);
                SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy", Locale.getDefault());
                Date date = sdf.parse(dobSelected1);
                Log.d(TAG, "apply: date selected" + date);

                Helper helper = mHelperRepo.getByUser("user.id", mUserRepo.getCurrentUser(), true);
                assert helper != null;
                helper.setDateOfBirth(date);
                mHelperRepo.save(helper);
                return dobSelected1;
            });

    this.dobSelected = Utils.toField(dobSelected);
}

This is the XML

<data>

    <variable
        name="vm"
        type="...OnboardDOBViewModel" />
</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:padding="30dp"
        android:text="@string/toolbar_title_date_of_birth"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <DatePicker
        android:id="@+id/onboard_birth_date_picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:calendarViewShown="false"
        android:day="@={vm.datePicker}"
        android:month="@={vm.monthPicker}"
        android:solidColor="@color/grayMedium"
        android:spinnersShown="true"
        android:year="@={vm.yearPicker}" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="test"
        android:text="@{vm.dobSelected}"
        android:visibility="visible"/>

</LinearLayout>

Calvin Cheng
  • 35,640
  • 39
  • 116
  • 167
Serene Lim
  • 108
  • 6

1 Answers1

0

Found this as my answer

OnDateChanged is not called in Date picker Android lollipop

added this in, and override the config, calendar UI is now spinner style and binding works

android:datePickerMode="spinner"
Serene Lim
  • 108
  • 6