Android: MVVM is it possible to display a message (toast/snackbar etc.) from the ViewModel












0















I want to know what is the best approach to display some sort of message in the view from the ViewModel. My ViewModel is making a POST call and "onResult" I want to pop up a message to the user containing a certain message.



This is my ViewModel:



public class RegisterViewModel extends ViewModel implements Observable {
.
.
.
public void registerUser(PostUserRegDao postUserRegDao) {

repository.executeRegistration(postUserRegDao).enqueue(new Callback<RegistratedUserDTO>() {
@Override
public void onResponse(Call<RegistratedUserDTO> call, Response<RegistratedUserDTO> response) {
RegistratedUserDTO registratedUserDTO = response.body();
/// here I want to set the message and send it to the Activity

if (registratedUserDTO.getRegisterUserResultDTO().getError() != null) {

}
}

});
}


And my Activity:



public class RegisterActivity extends BaseActivity {   

@Override
protected int layoutRes() {
return R.layout.activity_register;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);

ActivityRegisterBinding binding = DataBindingUtil.setContentView(this, layoutRes());
binding.setViewModel(mRegisterViewModel);
}


What would the best approach be in this case?










share|improve this question























  • You can use regular callback interface for this.

    – Khemraj
    Nov 27 '18 at 9:17
















0















I want to know what is the best approach to display some sort of message in the view from the ViewModel. My ViewModel is making a POST call and "onResult" I want to pop up a message to the user containing a certain message.



This is my ViewModel:



public class RegisterViewModel extends ViewModel implements Observable {
.
.
.
public void registerUser(PostUserRegDao postUserRegDao) {

repository.executeRegistration(postUserRegDao).enqueue(new Callback<RegistratedUserDTO>() {
@Override
public void onResponse(Call<RegistratedUserDTO> call, Response<RegistratedUserDTO> response) {
RegistratedUserDTO registratedUserDTO = response.body();
/// here I want to set the message and send it to the Activity

if (registratedUserDTO.getRegisterUserResultDTO().getError() != null) {

}
}

});
}


And my Activity:



public class RegisterActivity extends BaseActivity {   

@Override
protected int layoutRes() {
return R.layout.activity_register;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);

ActivityRegisterBinding binding = DataBindingUtil.setContentView(this, layoutRes());
binding.setViewModel(mRegisterViewModel);
}


What would the best approach be in this case?










share|improve this question























  • You can use regular callback interface for this.

    – Khemraj
    Nov 27 '18 at 9:17














0












0








0








I want to know what is the best approach to display some sort of message in the view from the ViewModel. My ViewModel is making a POST call and "onResult" I want to pop up a message to the user containing a certain message.



This is my ViewModel:



public class RegisterViewModel extends ViewModel implements Observable {
.
.
.
public void registerUser(PostUserRegDao postUserRegDao) {

repository.executeRegistration(postUserRegDao).enqueue(new Callback<RegistratedUserDTO>() {
@Override
public void onResponse(Call<RegistratedUserDTO> call, Response<RegistratedUserDTO> response) {
RegistratedUserDTO registratedUserDTO = response.body();
/// here I want to set the message and send it to the Activity

if (registratedUserDTO.getRegisterUserResultDTO().getError() != null) {

}
}

});
}


And my Activity:



public class RegisterActivity extends BaseActivity {   

@Override
protected int layoutRes() {
return R.layout.activity_register;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);

ActivityRegisterBinding binding = DataBindingUtil.setContentView(this, layoutRes());
binding.setViewModel(mRegisterViewModel);
}


What would the best approach be in this case?










share|improve this question














I want to know what is the best approach to display some sort of message in the view from the ViewModel. My ViewModel is making a POST call and "onResult" I want to pop up a message to the user containing a certain message.



This is my ViewModel:



public class RegisterViewModel extends ViewModel implements Observable {
.
.
.
public void registerUser(PostUserRegDao postUserRegDao) {

repository.executeRegistration(postUserRegDao).enqueue(new Callback<RegistratedUserDTO>() {
@Override
public void onResponse(Call<RegistratedUserDTO> call, Response<RegistratedUserDTO> response) {
RegistratedUserDTO registratedUserDTO = response.body();
/// here I want to set the message and send it to the Activity

if (registratedUserDTO.getRegisterUserResultDTO().getError() != null) {

}
}

});
}


And my Activity:



public class RegisterActivity extends BaseActivity {   

@Override
protected int layoutRes() {
return R.layout.activity_register;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);

ActivityRegisterBinding binding = DataBindingUtil.setContentView(this, layoutRes());
binding.setViewModel(mRegisterViewModel);
}


What would the best approach be in this case?







android-toast android-snackbar android-mvvm






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 26 '18 at 15:54









user3182266user3182266

43221039




43221039













  • You can use regular callback interface for this.

    – Khemraj
    Nov 27 '18 at 9:17



















  • You can use regular callback interface for this.

    – Khemraj
    Nov 27 '18 at 9:17

















You can use regular callback interface for this.

– Khemraj
Nov 27 '18 at 9:17





You can use regular callback interface for this.

– Khemraj
Nov 27 '18 at 9:17












1 Answer
1






active

oldest

votes


















0














Display sort of message in view from viewmodel using LiveData.



Step:




  • Add LiveData into your viewmodel

  • View just observe LiveData and update view related task


For example:



In Viewmodel:



var status = MutableLiveData<Boolean?>()
//In your network successfull response
status.value = true


In your Activity or fragment:



yourViewModelObject.status.observe(this, Observer { status ->
status?.let {
//Display Toast or snackbar
}
})





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53484781%2fandroid-mvvm-is-it-possible-to-display-a-message-toast-snackbar-etc-from-the%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Display sort of message in view from viewmodel using LiveData.



    Step:




    • Add LiveData into your viewmodel

    • View just observe LiveData and update view related task


    For example:



    In Viewmodel:



    var status = MutableLiveData<Boolean?>()
    //In your network successfull response
    status.value = true


    In your Activity or fragment:



    yourViewModelObject.status.observe(this, Observer { status ->
    status?.let {
    //Display Toast or snackbar
    }
    })





    share|improve this answer




























      0














      Display sort of message in view from viewmodel using LiveData.



      Step:




      • Add LiveData into your viewmodel

      • View just observe LiveData and update view related task


      For example:



      In Viewmodel:



      var status = MutableLiveData<Boolean?>()
      //In your network successfull response
      status.value = true


      In your Activity or fragment:



      yourViewModelObject.status.observe(this, Observer { status ->
      status?.let {
      //Display Toast or snackbar
      }
      })





      share|improve this answer


























        0












        0








        0







        Display sort of message in view from viewmodel using LiveData.



        Step:




        • Add LiveData into your viewmodel

        • View just observe LiveData and update view related task


        For example:



        In Viewmodel:



        var status = MutableLiveData<Boolean?>()
        //In your network successfull response
        status.value = true


        In your Activity or fragment:



        yourViewModelObject.status.observe(this, Observer { status ->
        status?.let {
        //Display Toast or snackbar
        }
        })





        share|improve this answer













        Display sort of message in view from viewmodel using LiveData.



        Step:




        • Add LiveData into your viewmodel

        • View just observe LiveData and update view related task


        For example:



        In Viewmodel:



        var status = MutableLiveData<Boolean?>()
        //In your network successfull response
        status.value = true


        In your Activity or fragment:



        yourViewModelObject.status.observe(this, Observer { status ->
        status?.let {
        //Display Toast or snackbar
        }
        })






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 30 '18 at 6:09









        Mitesh VanaliyaMitesh Vanaliya

        1,3381230




        1,3381230
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53484781%2fandroid-mvvm-is-it-possible-to-display-a-message-toast-snackbar-etc-from-the%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

            Calculate evaluation metrics using cross_val_predict sklearn

            Insert data from modal to MySQL (multiple modal on website)