/* * Copyright 2016 Kejun Xia * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.shipdream.lib.android.mvc.samples.simple.mvvm; import com.shipdream.lib.android.mvc.FragmentController; import com.shipdream.lib.android.mvc.MvcActivity; import com.shipdream.lib.android.mvc.MvcFragment; import com.shipdream.lib.android.mvc.samples.simple.mvvm.view.AppDelegateFragment; public class MainActivity extends MvcActivity { //Manually map MvcFragment and FragmentController // @Override // protected Class<? extends MvcFragment> mapFragmentRouting( // Class<? extends Controller> controllerClass) { // if (controllerClass == CounterMasterController.class) { // return CounterMasterScreen.class; // } else if (controllerClass == CounterDetailController.class) { // return CounterDetailScreen.class; // } else { // return null; // } // } @Override protected Class<? extends MvcFragment> mapFragmentRouting( Class<? extends FragmentController> controllerClass) { String controllerPackage = controllerClass.getPackage().getName(); //Find the classes of fragment under package .view and named in form of xxxScreen //For example //a.b.c.CounterMasterController -> a.b.c.view.CounterMasterScreen String viewPkgName = controllerPackage.substring(0, controllerPackage.lastIndexOf(".")) + ".view"; String fragmentClassName = viewPkgName + "." + controllerClass.getSimpleName().replace("Controller", "Screen"); try { return (Class<? extends MvcFragment>) Class.forName(fragmentClassName); } catch (ClassNotFoundException e) { String msg = String.format("Fragment class(%s) for controller(%s) can not be found", fragmentClassName, controllerClass.getName()); throw new RuntimeException(msg, e); } } /** * @return The class type of the delegate fragment for the activity */ @Override protected Class<? extends MvcActivity.DelegateFragment> getDelegateFragmentClass() { return AppDelegateFragment.class; } }