Size: a a a

Cicerone Chat (RUS)

2019 January 13

IS

Ilya Smirnov in Cicerone Chat (RUS)
Полезная информация
источник

IS

Ilya Smirnov in Cicerone Chat (RUS)
Где из переданного ключа создаётся интент активити или инстанс фрагмента?
источник

NK

ID:649333610 in Cicerone Chat (RUS)
public class ScreenNavigator {

   public static final String SCREEN_TRANSITION = "SCREEN_TRANSITION";
   public static final String SCREEN_NAME = "SCREEN_NAME";
   public static final String SCREEN_TRANSITION_DIRECTION = "SCREEN_TRANSITION_DIRECTION";

   private Navigator navigator;

   public ScreenNavigator(FragmentActivity activity, int containerViewId, Class screenClass) {
       this.navigator = initNavigator(activity, containerViewId, screenClass);
   }

   public static Set<Field> findFieldsWithAnnotation(Class<?> classs, Class<? extends Annotation> ann) {
       Set<Field> set = new HashSet<>();
       Class<?> c = classs;
       while (c != null) {
           for (Field field : c.getDeclaredFields()) {
               if (field.isAnnotationPresent(ann)) {
                   set.add(field);
               }
           }
           c = c.getSuperclass();
       }
       return set;
   }

   private SupportAppNavigator initNavigator(final FragmentActivity activity, int containerViewId, final Class screenClass) {
       return new SupportAppNavigator(activity, containerViewId) {

           @Override
           protected Intent createActivityIntent(String screenKey, Object data) {
               Map<String, Class<? extends Activity>> activities = getActivitiesScreens(screenClass);
               if (!activities.containsKey(screenKey)) return null;
               Intent intent = new Intent(activity, activities.get(screenKey));
               if (data != null) {
                   Bundle bundle = (Bundle) data;
                   intent.putExtras(bundle);
               }
               return intent;
           }

           @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();
источник

NK

ID:649333610 in Cicerone Chat (RUS)
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);
                   }
               }
           }
       };
   }

   private void setupAnim(ScreenTransition screenTransition, FragmentTransaction fragmentTransaction) {
       fragmentTransaction.setCustomAnimations(screenTransition.getEnter(), screenTransition.getExit());
   }

   private Map<String, Class<? extends Activity>> getActivitiesScreens(Class screenClass) {
       Map<String, Class<? extends Activity>> activities = new HashMap<>();
       for (Field field : findFieldsWithAnnotation(screenClass, RelatedActivity.class)) {
           try {
               activities.put((String) field.get(screenClass), field.getAnnotation(RelatedActivity.class).activity());
           } catch (IllegalAccessException e) {
               e.printStackTrace();
           }

       }
       return activities;
   }

   private Map<String, Class<? extends Fragment>> getFragmentScreens(Class screenClass) {
       Map<String, Class<? extends Fragment>> fragments = new HashMap<>();
       for (Field field : findFieldsWithAnnotation(screenClass, RelatedFragment.class)) {
           try {
               fragments.put((String) field.get(screenClass), field.getAnnotation(RelatedFragment.class).fragment());
           } catch (IllegalAccessException e) {
               e.printStackTrace();
           }

       }
       return fragments;
   }

   public Navigator getNavigator() {
       return navigator;
   }
}
источник

IS

Ilya Smirnov in Cicerone Chat (RUS)
Вот это извращение
источник

D

Donald in Cicerone Chat (RUS)
ID:649333610
etot kode pisal ukrainise
Казалось бы причём тут Украина
источник

IS

Ilya Smirnov in Cicerone Chat (RUS)
Этот код писала рука кремля
источник

NK

ID:649333610 in Cicerone Chat (RUS)
pochemu
источник

NK

ID:649333610 in Cicerone Chat (RUS)
hahahah
источник

NK

ID:649333610 in Cicerone Chat (RUS)
cho vi dumayte problema
источник

NK

ID:649333610 in Cicerone Chat (RUS)
patsani
источник

МН

Макс Наумов in Cicerone Chat (RUS)
Удали весь код, не относящийся к проблеме. Тогда людям легче будет разобраться и помочь
источник
2019 January 14

NK

ID:649333610 in Cicerone Chat (RUS)
I told exactly what is the problem
источник

NK

ID:649333610 in Cicerone Chat (RUS)
when click menu item in navigation in the item menu app crashes
источник

NK

ID:649333610 in Cicerone Chat (RUS)
due to library error
источник

NK

ID:649333610 in Cicerone Chat (RUS)
what is your suggestion which code should I share
источник

М

Макс in Cicerone Chat (RUS)
I should not allow a user click on menu
источник

NK

ID:649333610 in Cicerone Chat (RUS)
haha
источник

NK

ID:649333610 in Cicerone Chat (RUS)
nu ya nemogu reshat problemu
источник

NK

ID:649333610 in Cicerone Chat (RUS)
ya postmotrel toje github issue 77
источник