HI, когда я нажимаю пункт «Отказ от ответственности» в меню навигации.
получить следующее исключение.
java.lang.RuntimeException: не удается создать экран для пропущенного
screenKey.
на ru.terrakok.cicerone.android.SupportFragmentNavigator.unknownScreen (SupportFragmentNavigator.java:183)
на ru.terrakok.cicerone.android.SupportFragmentNavigator.applyCommand (SupportFragmentNavigator.java:67)
на ru.terrakok.cicerone.android.SupportAppNavigator.applyCommand (SupportAppNavigator.java:77)
на ru.terrakok.cicerone.CommandBuffer.executeCommand (CommandBuffer.java:43)
на ru.terrakok.cicerone.BaseRouter.executeCommand (BaseRouter.java:31)
на ru.terrakok.cicerone.Router.navigateTo (Router.java:84)
на com.empowered.healo.ui.activities.main.MainActivity $ initNavDrawer $ 3 $ onItemClicked $ 1.invoke (MainActivity.kt: 315)
на com.empowered.healo.ui.activities.main.MainActivity $ initNavDrawer $ 3 $ onItemClicked $ 1.invoke (MainActivity.kt: 241)
на com.empowered.healo.ui.activities.main.MainActivity $ initNavDrawer $ 2.onDrawerClosed (MainActivity.kt: 233)
на android.support.v4.widget.DrawerLayout.dispatchOnDrawerClosed (DrawerLayout.java:859)
на android.support.v4.widget.DrawerLayout.updateDrawerState (DrawerLayout.java:829)
на android.support.v4.widget.DrawerLayout $ ViewDragCallback.onViewDragStateChanged (DrawerLayout.java:2174)
на android.support.v4.widget.ViewDragHelper.setDragState (ViewDragHelper.java:891)
на android.support.v4.widget.ViewDragHelper $ 2.run (ViewDragHelper.java:343)
на android.os.Handler.handleCallback (Handler.java:836)
на android.os.Handler.dispatchMessage (Handler.java:103)
ниже метод, который может вызвать проблемы
navList.setOnItemClickListener(object : ItemClickListener<MenuView.MenuItem> {
override fun onItemClicked(t: MenuView.MenuItem, position: Int) {
val fragment = supportFragmentManager.findFragmentById(R.id.fragmentContainer)
var screen = ""
@Suppress("Annotator") val currentScreen = fragment!!.arguments?.getString(ScreenNavigator.SCREEN_NAME)
val data = Bundle()
when (t.title) {
R.string.item_menu_home -> {
screen = Screen.HOME
}
R.string.item_menu_session -> {
screen = Screen.START_SESSION
}
R.string.chat_support -> {
navList.clearBadgeForMenuItem(R.string.support_feedback)
Notifications.cancelNotification(this@MainActivity, Notifications.PushData.Message.LOCAL_PUSH_ID)
screen = Screen.CHAT
}
R.string.item_menu_pain_profile -> {
screen = Screen.SELF_DIAGNOSIS
}
R.string.item_menu_schedule_reminders -> {
screen = Screen.SCHEDULE
}
R.string.item_menu_progress_prognosis -> {
screen = Screen.PROGRESS
}
R.string.activity_journal -> {
screen = Screen.ACTIVITY_JOURNAL
}
R.string.therapy_information -> {
screen = Screen.THERAPY_INFO
}
R.string.item_menu_therapy_settings -> {
screen = Screen.THERAPY_SETTINGS
}
R.string.item_menu_account -> {
data.putBoolean("profile", true)
screen = Screen.PROFILE
}
R.string.item_menu_favourite -> {
screen = Screen.FAVOURITE_EXERCISES //this menu
}
R.string.medical_disclaimer -> {
screen = Screen.MEDICAL_DISCLAIMER
}
R.string.terms_of_use -> {
screen = Screen.TERMS_OF_USE
}
R.string.privacy_policy -> {
screen = Screen.PRIVACY_POLICY
}
R.string.rate_share -> {
screen = Screen.RATE_AND_SHARE
val marketIntent = Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id={appId}"))
startActivity(marketIntent)
}
R.string.about_healo -> {
screen = Screen.ABOUT
}
R.string.sign_out -> {
toggleDrawerScreen(false)
presenter.logOut()
return
}
else -> toggleDrawerScreen(false)
}
toggleDrawerScreen(false)
if (!screen.isEmpty() && screen != currentScreen) {
actionDrawerClose = if ((fragment is OnBackPressed) && (fragment.onBackPressed(screen, data))) {
null
} else {
{
HealApplication.INSTANCE.router.navigateTo(
screen,
data
)
}
}
} else {
actionDrawerClose = null
}
}
и я проверил ниже метод навигации, передавая правую клавишу к фрагменту
@Override
protected Fragment createFragment(String screenKey, Object data) {
Map<String, Class<? extends Fragment>> fragments = getFragmentScreens(screenClass);
if (!fragments.containsKey(screenKey)) {
return null;
}
Fragment fragment = null;
try {
fragment = fragments.get(screenKey).newInstance();
int direction = Gravity.BOTTOM;
if (data != null) {
direction = ((Bundle) data).getInt(SCREEN_TRANSITION_DIRECTION, Gravity.BOTTOM);
}
if (data == null || !((Bundle) data).containsKey(SCREEN_TRANSITION)) {
Slide slide = new Slide(direction);
slide.setDuration(250);
slide.setInterpolator(new LinearInterpolator());
fragment.setEnterTransition(slide);
}
if (data != null) {
Bundle bundle = ((Bundle) data);
bundle.putString(SCREEN_NAME, screenKey);
fragment.setArguments(bundle);
} else {
Bundle bundle = new Bundle();
bundle.putString(SCREEN_NAME, screenKey);
fragment.setArguments(bundle);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
if (activity instanceof MainActivity) {
((MainActivity) activity).changeBackground();
}
return fragment;
}
@Override
protected void setupFragmentTransactionAnimation(Command command, Fragment currentFragment, Fragment nextFragment, FragmentTransaction fragmentTransaction) {
if (command instanceof Replace) {
if (((Replace) command).getTransitionData() != null) {
Bundle bundle = (Bundle) ((Replace) command).getTransitionData();
if (bundle.containsKey(SCREEN_TRANSITION))
setupAnim((ScreenTransition) bundle.getSerializable(SCREEN_TRANSITION), fragmentTransaction);
}
} else if (command instanceof Forward) {
if (((Forward) command).getTransitionData() != null) {
Bundle bundle = (Bundle) ((Forward) command).getTransitionData();
if (bundle.containsKey(SCREEN_TRANSITION))
setupAnim((ScreenTransition) bundle.getSerializable(SCREEN_TRANSITION), fragmentTransaction);
}
}
}
};
}
и ниже MedicalDisclaimerFragment
@SuppressLint("ValidFragment")
class MedicalDisclaimerFragment extends Fragment {
public CustomToolbar customToolbar;
private WebView webView;
public static MedicalDisclaimerFragment newInstance() {
Bundle bundle = new Bundle();
bundle.putString("screenKey", "MEDICAL_DISCLAIMER"); // <-- это просто значение, чтобы проверить, работает ли так
MedicalDisclaimerFragment fragment = new MedicalDisclaimerFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.medical_disclaimer_fragment, container, false);
customToolbar = rootView.findViewById(R.id.toolbars);
getArguments().getString("screenKey","MEDICAL_DISCLAIMER");
customToolbar.setOnClickListener((View v) -> {
// do something
getActivity().onBackPressed();
// is this the error?
});
webView = rootView.findViewById(R.id.webViewMedical);
webView.loadUrl(getString(R.string.assets_clinical_info));
return rootView;
}
}
Я следовал и другим методам, но приложение по-прежнему зависало