some fixes for fragment managing

This commit is contained in:
Gavriil Sitnikov 2015-11-20 20:09:50 +03:00
parent d29e28ed0c
commit b59500a76f
2 changed files with 29 additions and 21 deletions

View File

@ -112,18 +112,7 @@ public abstract class AbstractBaseActivity extends AppCompatActivity
fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
final T fragment;
try {
fragment = (T) Fragment.instantiate(this, fragmentClass.getName(), args);
} catch (Exception ex) {
//TODO: log
return null;
}
fragmentManager.beginTransaction()
.replace(getFragmentContainerId(), fragment, null)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
return fragment;
return setFragment(fragmentClass);
}
@Nullable
@ -148,7 +137,7 @@ public abstract class AbstractBaseActivity extends AppCompatActivity
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(backStackTag)
.commit();
return (T) fragment;
return fragment;
}
/* Setting fragment of special class as top */
@ -172,10 +161,16 @@ public abstract class AbstractBaseActivity extends AppCompatActivity
}
/* Raises when device back button pressed */
@SuppressWarnings("PMD.AvoidLiteralsInIfCondition")
//TODO: wait for 1 to be ignored
@Override
public void onBackPressed() {
if (!UiUtils.tryForeachFragment(getSupportFragmentManager(), AbstractBaseFragment::onBackPressed)) {
super.onBackPressed();
if (!UiUtils.tryForeachFragment(getSupportFragmentManager(), fragment -> fragment.onBackPressed(this))) {
if (getSupportFragmentManager().getBackStackEntryCount() <= 1) {
supportFinishAfterTransition();
} else {
getSupportFragmentManager().popBackStackImmediate();
}
}
}
@ -186,7 +181,7 @@ public abstract class AbstractBaseActivity extends AppCompatActivity
final FragmentManager fragmentManager = getSupportFragmentManager();
if (UiUtils.tryForeachFragment(fragmentManager, AbstractBaseFragment::onHomePressed)) {
if (UiUtils.tryForeachFragment(fragmentManager, fragment -> fragment.onHomePressed(this))) {
return true;
}
@ -234,6 +229,19 @@ public abstract class AbstractBaseActivity extends AppCompatActivity
}
}
public void popBackStackToTopFragment() {
final FragmentManager fragmentManager = getSupportFragmentManager();
final int stackSize = fragmentManager.getBackStackEntryCount();
String currentFragmentName = null;
for (int i = stackSize - 2; i >= 0; i--) {
currentFragmentName = fragmentManager.getBackStackEntryAt(i).getName();
if (currentFragmentName.endsWith(TOP_FRAGMENT_TAG_MARK)) {
break;
}
}
fragmentManager.popBackStackImmediate(currentFragmentName, 0);
}
/* Shows device keyboard */
public void showSoftInput(@NonNull final View view) {
final InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

View File

@ -42,7 +42,7 @@ import java.util.Map;
* TODO: fill description
*/
// Yes, it's a God class with a lot of methods. Deal with it
@SuppressWarnings({"PMD.GodClass","PMD.TooManyMethods"})
@SuppressWarnings({"PMD.GodClass", "PMD.TooManyMethods"})
public abstract class AbstractBaseFragment<TViewController extends AbstractBaseFragment.ViewController> extends Fragment
implements OnFragmentStartedListener {
@ -140,13 +140,13 @@ public abstract class AbstractBaseFragment<TViewController extends AbstractBaseF
}
/* Raises when device back button pressed */
public boolean onBackPressed() {
return UiUtils.tryForeachFragment(getChildFragmentManager(), AbstractBaseFragment::onBackPressed);
public boolean onBackPressed(@NonNull final AbstractBaseActivity baseActivity) {
return UiUtils.tryForeachFragment(getChildFragmentManager(), fragment -> fragment.onBackPressed(baseActivity));
}
/* Raises when ActionBar home button pressed */
public boolean onHomePressed() {
return UiUtils.tryForeachFragment(getChildFragmentManager(), AbstractBaseFragment::onHomePressed);
public boolean onHomePressed(@NonNull final AbstractBaseActivity baseActivity) {
return UiUtils.tryForeachFragment(getChildFragmentManager(), fragment -> fragment.onHomePressed(baseActivity));
}
@Deprecated