Android DataBinding Activity finish()





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







5















I am trying to implement MVVM in my app with DataBinding library. For simple tasks that I have accomplish I can find the way out, but problem is that I cannot finish activity after some action.



Problem:



After receiving specific broadcast I have to close activity from ViewModel class. Since VM class doesn't have reference of the View, how can I finish the activity?
To be precise, I have splash screen and corresponding VM class for it that starts IntentService for downloading a data. After the data has been downloaded I have to finish the splash screen and start MainActivity. I have found the way to start new Activity from VM, but to finish the previous one is the mystery.



Can you please help me?
Thanks!










share|improve this question































    5















    I am trying to implement MVVM in my app with DataBinding library. For simple tasks that I have accomplish I can find the way out, but problem is that I cannot finish activity after some action.



    Problem:



    After receiving specific broadcast I have to close activity from ViewModel class. Since VM class doesn't have reference of the View, how can I finish the activity?
    To be precise, I have splash screen and corresponding VM class for it that starts IntentService for downloading a data. After the data has been downloaded I have to finish the splash screen and start MainActivity. I have found the way to start new Activity from VM, but to finish the previous one is the mystery.



    Can you please help me?
    Thanks!










    share|improve this question



























      5












      5








      5


      2






      I am trying to implement MVVM in my app with DataBinding library. For simple tasks that I have accomplish I can find the way out, but problem is that I cannot finish activity after some action.



      Problem:



      After receiving specific broadcast I have to close activity from ViewModel class. Since VM class doesn't have reference of the View, how can I finish the activity?
      To be precise, I have splash screen and corresponding VM class for it that starts IntentService for downloading a data. After the data has been downloaded I have to finish the splash screen and start MainActivity. I have found the way to start new Activity from VM, but to finish the previous one is the mystery.



      Can you please help me?
      Thanks!










      share|improve this question
















      I am trying to implement MVVM in my app with DataBinding library. For simple tasks that I have accomplish I can find the way out, but problem is that I cannot finish activity after some action.



      Problem:



      After receiving specific broadcast I have to close activity from ViewModel class. Since VM class doesn't have reference of the View, how can I finish the activity?
      To be precise, I have splash screen and corresponding VM class for it that starts IntentService for downloading a data. After the data has been downloaded I have to finish the splash screen and start MainActivity. I have found the way to start new Activity from VM, but to finish the previous one is the mystery.



      Can you please help me?
      Thanks!







      android android-activity mvvm data-binding android-databinding






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 1 '17 at 8:34









      yennsarah

      4,29511637




      4,29511637










      asked Feb 21 '17 at 10:54









      hogarhogar

      178319




      178319
























          2 Answers
          2






          active

          oldest

          votes


















          4














          Create a SplashStatus model with a ObservableBoolean:



          private static class SplashStatus {
          public final ObservableBoolean isFinished = new ObservableBooelan();
          }


          Here is your Splash layout:



          <layout xmlns:android="http://schemas.android.com/apk/res/android">
          <data>
          <variable name="status" type="com.example.SplashStatus"/>
          </data>
          <LinearLayout
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
          <TextView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Splash Screen"
          android:onFinish="@{status.isFinished}"/>
          </LinearLayout>
          </layout>


          And binding adapter method:



          @BindingAdapter("android:onFinish")
          public static void finishSplash(View view, boolean isFinished) {

          if(isFinished){
          ((Activity)(view.getContext())).startActivity(new Intent(view.getContext(), MainActivity.class))
          ((Activity)(view.getContext())).finish();
          }
          }


          In the SplashActivity.java init your data binding on onCreate. Whenever you assign isFinished.set(true) onFinished method will start your MainActivity and finish current.






          share|improve this answer































            1














            if you want just to finish() the activity from layout with databinding:



            android:onClick="@{(view)->((Activity)(view.getContext())).finish()}"






            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%2f42365360%2fandroid-databinding-activity-finish%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              4














              Create a SplashStatus model with a ObservableBoolean:



              private static class SplashStatus {
              public final ObservableBoolean isFinished = new ObservableBooelan();
              }


              Here is your Splash layout:



              <layout xmlns:android="http://schemas.android.com/apk/res/android">
              <data>
              <variable name="status" type="com.example.SplashStatus"/>
              </data>
              <LinearLayout
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
              <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Splash Screen"
              android:onFinish="@{status.isFinished}"/>
              </LinearLayout>
              </layout>


              And binding adapter method:



              @BindingAdapter("android:onFinish")
              public static void finishSplash(View view, boolean isFinished) {

              if(isFinished){
              ((Activity)(view.getContext())).startActivity(new Intent(view.getContext(), MainActivity.class))
              ((Activity)(view.getContext())).finish();
              }
              }


              In the SplashActivity.java init your data binding on onCreate. Whenever you assign isFinished.set(true) onFinished method will start your MainActivity and finish current.






              share|improve this answer




























                4














                Create a SplashStatus model with a ObservableBoolean:



                private static class SplashStatus {
                public final ObservableBoolean isFinished = new ObservableBooelan();
                }


                Here is your Splash layout:



                <layout xmlns:android="http://schemas.android.com/apk/res/android">
                <data>
                <variable name="status" type="com.example.SplashStatus"/>
                </data>
                <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <TextView android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Splash Screen"
                android:onFinish="@{status.isFinished}"/>
                </LinearLayout>
                </layout>


                And binding adapter method:



                @BindingAdapter("android:onFinish")
                public static void finishSplash(View view, boolean isFinished) {

                if(isFinished){
                ((Activity)(view.getContext())).startActivity(new Intent(view.getContext(), MainActivity.class))
                ((Activity)(view.getContext())).finish();
                }
                }


                In the SplashActivity.java init your data binding on onCreate. Whenever you assign isFinished.set(true) onFinished method will start your MainActivity and finish current.






                share|improve this answer


























                  4












                  4








                  4







                  Create a SplashStatus model with a ObservableBoolean:



                  private static class SplashStatus {
                  public final ObservableBoolean isFinished = new ObservableBooelan();
                  }


                  Here is your Splash layout:



                  <layout xmlns:android="http://schemas.android.com/apk/res/android">
                  <data>
                  <variable name="status" type="com.example.SplashStatus"/>
                  </data>
                  <LinearLayout
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
                  <TextView android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Splash Screen"
                  android:onFinish="@{status.isFinished}"/>
                  </LinearLayout>
                  </layout>


                  And binding adapter method:



                  @BindingAdapter("android:onFinish")
                  public static void finishSplash(View view, boolean isFinished) {

                  if(isFinished){
                  ((Activity)(view.getContext())).startActivity(new Intent(view.getContext(), MainActivity.class))
                  ((Activity)(view.getContext())).finish();
                  }
                  }


                  In the SplashActivity.java init your data binding on onCreate. Whenever you assign isFinished.set(true) onFinished method will start your MainActivity and finish current.






                  share|improve this answer













                  Create a SplashStatus model with a ObservableBoolean:



                  private static class SplashStatus {
                  public final ObservableBoolean isFinished = new ObservableBooelan();
                  }


                  Here is your Splash layout:



                  <layout xmlns:android="http://schemas.android.com/apk/res/android">
                  <data>
                  <variable name="status" type="com.example.SplashStatus"/>
                  </data>
                  <LinearLayout
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
                  <TextView android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Splash Screen"
                  android:onFinish="@{status.isFinished}"/>
                  </LinearLayout>
                  </layout>


                  And binding adapter method:



                  @BindingAdapter("android:onFinish")
                  public static void finishSplash(View view, boolean isFinished) {

                  if(isFinished){
                  ((Activity)(view.getContext())).startActivity(new Intent(view.getContext(), MainActivity.class))
                  ((Activity)(view.getContext())).finish();
                  }
                  }


                  In the SplashActivity.java init your data binding on onCreate. Whenever you assign isFinished.set(true) onFinished method will start your MainActivity and finish current.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Mar 3 '17 at 20:01









                  ugurugur

                  2,17821439




                  2,17821439

























                      1














                      if you want just to finish() the activity from layout with databinding:



                      android:onClick="@{(view)->((Activity)(view.getContext())).finish()}"






                      share|improve this answer




























                        1














                        if you want just to finish() the activity from layout with databinding:



                        android:onClick="@{(view)->((Activity)(view.getContext())).finish()}"






                        share|improve this answer


























                          1












                          1








                          1







                          if you want just to finish() the activity from layout with databinding:



                          android:onClick="@{(view)->((Activity)(view.getContext())).finish()}"






                          share|improve this answer













                          if you want just to finish() the activity from layout with databinding:



                          android:onClick="@{(view)->((Activity)(view.getContext())).finish()}"







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 16 '18 at 10:29









                          Fidan BacajFidan Bacaj

                          13417




                          13417






























                              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%2f42365360%2fandroid-databinding-activity-finish%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

                              The Sandy Post

                              Danny Elfman

                              Pages that link to "Head v. Amoskeag Manufacturing Co."