@Override
 public Object instantiateItem(ViewGroup container, int position) {
   Fragment fragment;
   // If we already have this item instantiated, there is nothing
   // to do.  This can happen when we are restoring the entire pager
   // from its saved state, where the fragment manager has already
   // taken care of restoring the fragments we previously had instantiated.
   fragment = mFragments.get(position);
   if (fragment != null) {
     return fragment;
   }
   if (mCurTransaction == null) {
     mCurTransaction = mFragmentManager.beginTransaction();
   }
   FragmentState fs = mFragmentStates.get(position);
   if (fs != null) {
     FragmentManager fragmentManager = getFragmentActivity().getSupportFragmentManager();
     if (getParentFragment() != null) {
       fragmentManager = getParentFragment().getChildFragmentManager();
     }
     // Fix Can't change tag of fragment Error
     // http://stackoverflow.com/questions/24355838/cant-change-tag-of-fragment-error-trying-to-use-a-pageradapter-for-switching
     if ((fs.mTag != null && fs.mTag.equals(mFragmentTags.get(position)))
         || (fs.mTag == null && mFragmentTags.get(position) == null)) {
       fragment =
           fs.instantiate(
               FragmentUtils.getFragmentHostCallback(fragmentManager),
               getParentFragment(),
               FragmentUtils.getFragmentManagerNonConfig(fragmentManager));
       // Fix bug
       // http://stackoverflow.com/questions/11381470/classnotfoundexception-when-unmarshalling-android-support-v4-view-viewpagersav
       if (fragment.mSavedFragmentState != null) {
         fragment.mSavedFragmentState.setClassLoader(fragment.getClass().getClassLoader());
       }
     } else {
       Log.e(
           TAG,
           String.format(
               "Fragment tag isn't equal! Origin: %s %s", fs.mTag, mFragmentTags.get(position)));
       mFragmentStates.set(position, null);
     }
   }
   if (fragment == null) {
     fragment =
         Fragment.instantiate(
             getFragmentActivity(),
             mFragmentClassNames.get(position),
             mFragmentArgs.get(position));
   }
   if (DEBUG) {
     Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
   }
   fragment.setMenuVisibility(false);
   fragment.setUserVisibleHint(false);
   mFragments.set(position, fragment);
   mFragmentStates.set(position, null);
   mCurTransaction.add(container.getId(), fragment, mFragmentTags.get(position));
   return fragment;
 }
Пример #2
0
  @Test
  public void testTraversal_Chain() {

    IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance();

    IAtom[] atoms =
        new IAtom[] {
          builder.newInstance(IAtom.class, "C"),
          builder.newInstance(IAtom.class, "C"),
          builder.newInstance(IAtom.class, "C"),
          builder.newInstance(IAtom.class, "C"),
          builder.newInstance(IAtom.class, "C"),
          builder.newInstance(IAtom.class, "C")
        };
    IBond[] bonds =
        new IBond[] {
          builder.newInstance(IBond.class, atoms[0], atoms[1]),
          builder.newInstance(IBond.class, atoms[1], atoms[2]),
          builder.newInstance(IBond.class, atoms[2], atoms[3]),
          builder.newInstance(IBond.class, atoms[3], atoms[4]),
          builder.newInstance(IBond.class, atoms[4], atoms[5])
        };

    IAtomContainer m = builder.newInstance(IAtomContainer.class, 0, 0, 0, 0);
    m.setAtoms(atoms);
    m.setBonds(bonds);

    List<IBond> accumulator = new ArrayList<IBond>();

    // traverse from one end
    FragmentUtils.traverse(m, atoms[0], accumulator);

    assertThat(accumulator.size(), is(5));
    assertThat(accumulator.get(0), is(bonds[0]));
    assertThat(accumulator.get(1), is(bonds[1]));
    assertThat(accumulator.get(2), is(bonds[2]));
    assertThat(accumulator.get(3), is(bonds[3]));
    assertThat(accumulator.get(4), is(bonds[4]));

    // traverse from the middle
    accumulator.clear();
    FragmentUtils.traverse(m, atoms[3], accumulator);

    assertThat(accumulator.size(), is(5));

    assertThat(accumulator.get(0), is(bonds[2]));
    assertThat(accumulator.get(1), is(bonds[1]));
    assertThat(accumulator.get(2), is(bonds[0]));
    assertThat(accumulator.get(3), is(bonds[3]));
    assertThat(accumulator.get(4), is(bonds[4]));
  }
Пример #3
0
  @Test
  public void testMakeAtomContainer() {

    IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance();

    IAtom atom = builder.newInstance(IAtom.class, "C");
    IAtom exclude = builder.newInstance(IAtom.class, "C");

    IAtom a1 = builder.newInstance(IAtom.class, "C");
    IAtom a2 = builder.newInstance(IAtom.class, "C");

    IBond[] bonds =
        new IBond[] {
          builder.newInstance(IBond.class, atom, exclude),
          builder.newInstance(IBond.class, a1, a2),
          builder.newInstance(IBond.class, a1, atom),
          builder.newInstance(IBond.class, a2, exclude)
        };

    IAtomContainer part = FragmentUtils.makeAtomContainer(atom, Arrays.asList(bonds), exclude);

    assertThat(part.getAtomCount(), is(3));
    assertThat(part.getBondCount(), is(2));

    Assert.assertTrue(part.contains(atom));
    Assert.assertTrue(part.contains(a1));
    Assert.assertTrue(part.contains(a2));
    Assert.assertFalse(part.contains(exclude));

    Assert.assertTrue(part.contains(bonds[1]));
    Assert.assertTrue(part.contains(bonds[2]));
  }
  @Override
  public void finishUpdate(ViewGroup container) {
    if (mCurTransaction != null) {
      mCurTransaction.commitAllowingStateLoss();
      mCurTransaction = null;
      mFragmentManager.executePendingTransactions();

      for (Fragment fragment : mFragments) {
        if (fragment != null) {
          /*
          if (fragment.isAdded() && !fragment.isResumed()) {
              // Fix sdk 23.0.1 : Fragment isAdded, but didn't resumed.
              if (FragmentUtils.isStateLoss(fragment.getFragmentManager())) {
                  continue;
              }
              // Test move to fixActiveFragment(mFragmentManager, fragment);
              // fragment.getFragmentManager().beginTransaction().detach(fragment).attach(fragment).commit();
          }
          */
          if (FragmentUtils.isStateLoss(fragment.getFragmentManager())) {
            continue;
          }
          // Fix sdk 22.0.1 : Fragment is added by transaction. BUT didn't add to FragmentManager's
          // mActive. If you Rotation.
          fixActiveFragment(mFragmentManager, fragment);
        }
      }
    }
  }
 public static void fixActiveFragment(FragmentManager fragmentManager, Fragment fragment) {
   FragmentManagerImpl fm = (FragmentManagerImpl) fragmentManager;
   boolean needMatch = false;
   Fragment willRemoveFrag = null;
   if (fm.mActive != null) {
     int index = fragment.mIndex;
     if (index < 0) {
       Log.e(TAG, String.format("Fragment mIndex %s < 0 ! Origin: %s", fragment.mIndex, fragment));
       fragment.getFragmentManager().beginTransaction().remove(fragment).commit();
       return;
     }
     Fragment origin = fm.mActive.get(index);
     if (origin != null) {
       if ((origin.mIndex != fragment.mIndex) || !(origin.equals(fragment))) {
         Log.e(
             TAG,
             String.format(
                 "Fragment isn't equal! Origin: %s %s, Fragment: %s %s",
                 origin.toString(), origin.mIndex, fragment.toString(), fragment.mIndex));
         ArrayList<Integer> indexArray = new ArrayList<>();
         for (Fragment f : fm.mAdded) {
           if (indexArray.contains(f.mIndex)) {
             willRemoveFrag = origin;
             break;
           }
           indexArray.add(f.mIndex);
         }
       }
     }
     fm.mActive.set(index, fragment);
     if (willRemoveFrag != null) {
       // 2016.01.26 Fix bug mAdded not match
       // 瀏覽所有Fragment後,轉至後瀏覽其他Fragment會產生衝突
       fm.mAdded.remove(willRemoveFrag);
     }
     // 如往回跳的話會發現沒有執行
     // 1~5 is Fragment
     // 1 2 3 4 5 -> 3
     // 1 2 3 -> 1
     // v25.0.0 Fix fragment didn't run, if through step 1, 2, 3 then go back to 1, step 1 fragment
     // didn't run
     if (fragment.getUserVisibleHint() && !fragment.isResumed()) {
       if (!FragmentUtils.isStateLoss(fragment.getFragmentManager())) {
         fragment
             .getFragmentManager()
             .beginTransaction()
             .detach(fragment)
             .attach(fragment)
             .commit();
       }
     }
   }
 }
Пример #6
0
 @Test
 public void testSplit() throws CDKException {
   IAtomContainer mol = smilesParser.parseSmiles("C1CC1C2CCC2");
   SpanningTree st = new SpanningTree(mol);
   IRingSet rings = st.getAllRings();
   IBond splitBond = null;
   for (int i = 0; i < mol.getBondCount(); i++) {
     if (rings.getRings(mol.getBond(i)).getAtomContainerCount() == 0) {
       splitBond = mol.getBond(i);
       break;
     }
   }
   List<IAtomContainer> frags = FragmentUtils.splitMolecule(mol, splitBond);
   SmilesGenerator sg = new SmilesGenerator();
   Set<String> uniqueFrags = new HashSet<String>();
   for (IAtomContainer frag : frags) {
     uniqueFrags.add(sg.createSMILES(frag));
   }
   Assert.assertEquals(2, uniqueFrags.size());
   // You can put the fragments back together with a ring closure and dot
   // [CH]12CC1.[CH]12CCC1
   Assert.assertThat(uniqueFrags, hasItems("[CH]1CC1", "[CH]1CCC1"));
 }
Пример #7
0
 @Override
 public void onAttach(Activity activity) {
   super.onAttach(activity);
   mListener = FragmentUtils.tryActivityCast(getActivity(), SettingsFragmentListener.class, false);
 }