|  | @@ -45,10 +45,7 @@ import java.util.LinkedHashMap;
 | 
	
		
			
			| 45 | 45 |  import java.util.List;
 | 
	
		
			
			| 46 | 46 |  import java.util.Map;
 | 
	
		
			
			| 47 | 47 |  
 | 
	
		
			
			| 48 |  | -import static com.reactnativenavigation.utils.CollectionUtils.filter;
 | 
	
		
			
			| 49 |  | -import static com.reactnativenavigation.utils.CollectionUtils.forEach;
 | 
	
		
			
			| 50 |  | -import static com.reactnativenavigation.utils.CollectionUtils.keyBy;
 | 
	
		
			
			| 51 |  | -import static com.reactnativenavigation.utils.CollectionUtils.merge;
 | 
	
		
			
			|  | 48 | +import static com.reactnativenavigation.utils.CollectionUtils.*;
 | 
	
		
			
			| 52 | 49 |  import static com.reactnativenavigation.utils.ObjectUtils.perform;
 | 
	
		
			
			| 53 | 50 |  
 | 
	
		
			
			| 54 | 51 |  public class StackPresenter {
 | 
	
	
		
			
			|  | @@ -205,8 +202,9 @@ public class StackPresenter {
 | 
	
		
			
			| 205 | 202 |          topBar.setBackgroundColor(options.background.color.get(Color.WHITE));
 | 
	
		
			
			| 206 | 203 |  
 | 
	
		
			
			| 207 | 204 |          if (options.background.component.hasValue()) {
 | 
	
		
			
			| 208 |  | -            if (backgroundControllers.containsKey(component)) {
 | 
	
		
			
			| 209 |  | -                topBar.setBackgroundComponent(backgroundControllers.get(component).getView());
 | 
	
		
			
			|  | 205 | +            View createdComponent = findBackgroundComponent(options.background.component);
 | 
	
		
			
			|  | 206 | +            if (createdComponent != null) {
 | 
	
		
			
			|  | 207 | +                topBar.setBackgroundComponent(createdComponent);
 | 
	
		
			
			| 210 | 208 |              } else {
 | 
	
		
			
			| 211 | 209 |                  TopBarBackgroundViewController controller = new TopBarBackgroundViewController(activity, topBarBackgroundViewCreator);
 | 
	
		
			
			| 212 | 210 |                  controller.setWaitForRender(options.background.waitForRender);
 | 
	
	
		
			
			|  | @@ -215,6 +213,8 @@ public class StackPresenter {
 | 
	
		
			
			| 215 | 213 |                  controller.getView().setLayoutParams(new RelativeLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
 | 
	
		
			
			| 216 | 214 |                  topBar.setBackgroundComponent(controller.getView());
 | 
	
		
			
			| 217 | 215 |              }
 | 
	
		
			
			|  | 216 | +        } else {
 | 
	
		
			
			|  | 217 | +            topBar.clearBackgroundComponent();
 | 
	
		
			
			| 218 | 218 |          }
 | 
	
		
			
			| 219 | 219 |  
 | 
	
		
			
			| 220 | 220 |          if (options.testId.hasValue()) topBar.setTestId(options.testId.get());
 | 
	
	
		
			
			|  | @@ -233,6 +233,17 @@ public class StackPresenter {
 | 
	
		
			
			| 233 | 233 |          }
 | 
	
		
			
			| 234 | 234 |      }
 | 
	
		
			
			| 235 | 235 |  
 | 
	
		
			
			|  | 236 | +    @Nullable
 | 
	
		
			
			|  | 237 | +    private View findBackgroundComponent(com.reactnativenavigation.parse.Component component) {
 | 
	
		
			
			|  | 238 | +        for (TopBarBackgroundViewController controller : backgroundControllers.values()) {
 | 
	
		
			
			|  | 239 | +            if (ObjectUtils.equalsNotNull(controller.getComponent().name.get(null), component.name.get(null)) &&
 | 
	
		
			
			|  | 240 | +                ObjectUtils.equalsNotNull(controller.getComponent().componentId.get(null), component.componentId.get(null))) {
 | 
	
		
			
			|  | 241 | +                return controller.getView();
 | 
	
		
			
			|  | 242 | +            }
 | 
	
		
			
			|  | 243 | +        }
 | 
	
		
			
			|  | 244 | +        return null;
 | 
	
		
			
			|  | 245 | +    }
 | 
	
		
			
			|  | 246 | +
 | 
	
		
			
			| 236 | 247 |      private void setInitialTopBarVisibility(TopBarOptions options) {
 | 
	
		
			
			| 237 | 248 |          if (options.visible.isFalse()) {
 | 
	
		
			
			| 238 | 249 |              topBar.hide();
 | 
	
	
		
			
			|  | @@ -268,7 +279,7 @@ public class StackPresenter {
 | 
	
		
			
			| 268 | 279 |              componentRightButtons.put(child, keyBy(rightButtonControllers, TitleBarButtonController::getButtonInstanceId));
 | 
	
		
			
			| 269 | 280 |              topBar.setRightButtons(rightButtonControllers);
 | 
	
		
			
			| 270 | 281 |          } else {
 | 
	
		
			
			| 271 |  | -            topBar.setRightButtons(null);
 | 
	
		
			
			|  | 282 | +            topBar.clearRightButtons();
 | 
	
		
			
			| 272 | 283 |          }
 | 
	
		
			
			| 273 | 284 |  
 | 
	
		
			
			| 274 | 285 |          if (leftButtons != null) {
 | 
	
	
		
			
			|  | @@ -276,7 +287,7 @@ public class StackPresenter {
 | 
	
		
			
			| 276 | 287 |              componentLeftButtons.put(child, keyBy(leftButtonControllers, TitleBarButtonController::getButtonInstanceId));
 | 
	
		
			
			| 277 | 288 |              topBar.setLeftButtons(leftButtonControllers);
 | 
	
		
			
			| 278 | 289 |          } else {
 | 
	
		
			
			| 279 |  | -            topBar.setLeftButtons(null);
 | 
	
		
			
			|  | 290 | +            topBar.clearLeftButtons();
 | 
	
		
			
			| 280 | 291 |          }
 | 
	
		
			
			| 281 | 292 |  
 | 
	
		
			
			| 282 | 293 |          if (options.buttons.back.visible.isTrue() && !options.buttons.hasLeftButtons()) {
 |