Skip to content

PlumpMath/ReactiveViewModel

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ReactiveViewModel

ViewModel

public class MainViewModel {
  public final ReactiveProperty<String> query = new ReactiveProperty<>();

  public MainViewModel() {
  }
}

View

public class ReactiveEditText extends EditText {
  public final ReactiveProperty<CharSequence> text = new ReactiveProperty<>();

  public ReactiveEditText(Context context) {
    super(context);
    init();
  }

  private void init() {
    addTextChangedListener(new SimpleTextWatcher() {
      @Override
      public void afterTextChanged(Editable s) {
        text.set(s);
      }
    });
  }
}

ViewController

public class MainFragment extends ReactiveFragment {
  @Inject MainViewModel mainViewModel;
  @InjectView(R.id.queryEditText) ReactiveEditText queryEditText;
  @InjectView(R.id.queryTextView) TextView queryTextView;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setLayout(R.layout.fragment_main);
  }

  @Override
  public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    addViewSubscription(
        mainViewModel.query
            .whenChanged()
            .subscribe(ViewActions.setText(queryTextView))
    );

    addViewSubscription(
        twoWayBind(
            mainViewModel.query,
            queryEditText.text,
            new StringToCharSequenceConverter(),
            new CharSequenceToStringConverter())
    );
  }
}

About

A pet project to showcase how to enforce MVVM architecture with RxAndroid

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 100.0%