|  | @@ -6,6 +6,7 @@ import android.os.Build;
 | 
	
		
			
			| 6 | 6 |  import android.support.annotation.NonNull;
 | 
	
		
			
			| 7 | 7 |  import android.support.annotation.Nullable;
 | 
	
		
			
			| 8 | 8 |  import android.support.design.widget.AppBarLayout;
 | 
	
		
			
			|  | 9 | +import android.support.v4.util.Pair;
 | 
	
		
			
			| 9 | 10 |  import android.support.v7.app.ActionBar;
 | 
	
		
			
			| 10 | 11 |  import android.view.Gravity;
 | 
	
		
			
			| 11 | 12 |  import android.view.ViewGroup;
 | 
	
	
		
			
			|  | @@ -34,7 +35,7 @@ public class TopBar extends AppBarLayout {
 | 
	
		
			
			| 34 | 35 |      protected TopTabs topTabs;
 | 
	
		
			
			| 35 | 36 |      private VisibilityAnimator visibilityAnimator;
 | 
	
		
			
			| 36 | 37 |      @Nullable
 | 
	
		
			
			| 37 |  | -    private ContentView reactView;
 | 
	
		
			
			|  | 38 | +    private Pair<String, ContentView> reactView;
 | 
	
		
			
			| 38 | 39 |  
 | 
	
		
			
			| 39 | 40 |      public TopBar(Context context) {
 | 
	
		
			
			| 40 | 41 |          super(context);
 | 
	
	
		
			
			|  | @@ -91,15 +92,32 @@ public class TopBar extends AppBarLayout {
 | 
	
		
			
			| 91 | 92 |  
 | 
	
		
			
			| 92 | 93 |      public void setReactView(@NonNull StyleParams styleParams) {
 | 
	
		
			
			| 93 | 94 |          if (styleParams.hasTopBarCustomComponent()) {
 | 
	
		
			
			| 94 |  | -            reactView = createReactView(styleParams);
 | 
	
		
			
			|  | 95 | +            if (isReactViewAlreadySetAndUnchanged(styleParams)) {
 | 
	
		
			
			|  | 96 | +                return;
 | 
	
		
			
			|  | 97 | +            }
 | 
	
		
			
			|  | 98 | +            unmountReactView();
 | 
	
		
			
			|  | 99 | +            reactView = new Pair<>(styleParams.topBarReactView, createReactView(styleParams));
 | 
	
		
			
			| 95 | 100 |              if ("fill".equals(styleParams.topBarReactViewAlignment)) {
 | 
	
		
			
			| 96 |  | -                addReactViewFill(reactView);
 | 
	
		
			
			|  | 101 | +                addReactViewFill(reactView.second);
 | 
	
		
			
			| 97 | 102 |              } else {
 | 
	
		
			
			| 98 |  | -                addCenteredReactView(reactView);
 | 
	
		
			
			|  | 103 | +                addCenteredReactView(reactView.second);
 | 
	
		
			
			| 99 | 104 |              }
 | 
	
		
			
			|  | 105 | +        } else {
 | 
	
		
			
			|  | 106 | +            unmountReactView();
 | 
	
		
			
			| 100 | 107 |          }
 | 
	
		
			
			| 101 | 108 |      }
 | 
	
		
			
			| 102 | 109 |  
 | 
	
		
			
			|  | 110 | +    private void unmountReactView() {
 | 
	
		
			
			|  | 111 | +        if (reactView == null) return;
 | 
	
		
			
			|  | 112 | +        titleBar.removeView(reactView.second);
 | 
	
		
			
			|  | 113 | +        reactView.second.unmountReactView();
 | 
	
		
			
			|  | 114 | +        reactView = null;
 | 
	
		
			
			|  | 115 | +    }
 | 
	
		
			
			|  | 116 | +
 | 
	
		
			
			|  | 117 | +    private boolean isReactViewAlreadySetAndUnchanged(@NonNull StyleParams styleParams) {
 | 
	
		
			
			|  | 118 | +        return reactView != null && styleParams.topBarReactView.equals(reactView.first);
 | 
	
		
			
			|  | 119 | +    }
 | 
	
		
			
			|  | 120 | +
 | 
	
		
			
			| 103 | 121 |      private ContentView createReactView(StyleParams styleParams) {
 | 
	
		
			
			| 104 | 122 |          return new ContentView(getContext(),
 | 
	
		
			
			| 105 | 123 |                  styleParams.topBarReactView,
 | 
	
	
		
			
			|  | @@ -217,7 +235,8 @@ public class TopBar extends AppBarLayout {
 | 
	
		
			
			| 217 | 235 |  
 | 
	
		
			
			| 218 | 236 |      public void destroy() {
 | 
	
		
			
			| 219 | 237 |          if (reactView != null) {
 | 
	
		
			
			| 220 |  | -            reactView.unmountReactView();
 | 
	
		
			
			|  | 238 | +            reactView.second.unmountReactView();
 | 
	
		
			
			|  | 239 | +            reactView = null;
 | 
	
		
			
			| 221 | 240 |          }
 | 
	
		
			
			| 222 | 241 |          titleBar.destroy();
 | 
	
		
			
			| 223 | 242 |      }
 |