如何删除相同片段之间的动画?
How to remove animation between the same fragments?
我想在选择当前显示的片段时避免片段之间的过渡。
public boolean onSelect(View view, int index) {
switch (view.getId()) {
case R.id.toDiary:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
new DiaryFragment()).addToBackStack("Diary").commit();
break;
case R.id.toForecast:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
new ForecastFragment()).addToBackStack("Forecast").commit();
break;
case R.id.toCharts:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
new ChartsFragment()).addToBackStack("Charts").commit();
break;
case R.id.toSettings:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
new SettingsFragment()).addToBackStack("Settings").commit();
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
动画 可以帮助您理解我的问题:
简而言之,当用户已经看到所选片段时,我不想看到动画。
我试图保留变量 currentLaunchedFragment
并检查用户是否选择了当前显示的片段,但问题是我使用 .addToBackStack("")
以便能够返回到先前显示的片段.问题是我找不到任何方法来实现 currentLaunchedFragment
,同时单击后退按钮会产生另一种不需要的行为。
您可以尝试instanceof方法来检查当前片段:
Fragment currentFragment;
public boolean onSelect(View view, int index) {
switch (view.getId()) {
case R.id.toDiary:
if(currentFragment==null || !(currentFragment instanceof DiaryFragment)){
currentFragment= new DiaryFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
currentFragment).addToBackStack("Diary").commit();
}
break;
case R.id.toForecast:
if(currentFragment==null ||!(currentFragment instanceof DiaryFragment)){
currentFragment= new ForecastFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
currentFragment).addToBackStack("Forecast").commit();
}
break;
case R.id.toCharts:
if(currentFragment==null ||!(currentFragment instanceof DiaryFragment)){
currentFragment= new ChartsFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
currentFragment).addToBackStack("Charts").commit();
}
break;
case R.id.toSettings:
if(currentFragment==null ||!(currentFragment instanceof DiaryFragment)){
currentFragment= new SettingsFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
currentFragment).addToBackStack("Settings").commit();
}
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
我想在选择当前显示的片段时避免片段之间的过渡。
public boolean onSelect(View view, int index) {
switch (view.getId()) {
case R.id.toDiary:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
new DiaryFragment()).addToBackStack("Diary").commit();
break;
case R.id.toForecast:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
new ForecastFragment()).addToBackStack("Forecast").commit();
break;
case R.id.toCharts:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
new ChartsFragment()).addToBackStack("Charts").commit();
break;
case R.id.toSettings:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
new SettingsFragment()).addToBackStack("Settings").commit();
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
动画 可以帮助您理解我的问题:
简而言之,当用户已经看到所选片段时,我不想看到动画。
我试图保留变量 currentLaunchedFragment
并检查用户是否选择了当前显示的片段,但问题是我使用 .addToBackStack("")
以便能够返回到先前显示的片段.问题是我找不到任何方法来实现 currentLaunchedFragment
,同时单击后退按钮会产生另一种不需要的行为。
您可以尝试instanceof方法来检查当前片段:
Fragment currentFragment;
public boolean onSelect(View view, int index) {
switch (view.getId()) {
case R.id.toDiary:
if(currentFragment==null || !(currentFragment instanceof DiaryFragment)){
currentFragment= new DiaryFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
currentFragment).addToBackStack("Diary").commit();
}
break;
case R.id.toForecast:
if(currentFragment==null ||!(currentFragment instanceof DiaryFragment)){
currentFragment= new ForecastFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
currentFragment).addToBackStack("Forecast").commit();
}
break;
case R.id.toCharts:
if(currentFragment==null ||!(currentFragment instanceof DiaryFragment)){
currentFragment= new ChartsFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
currentFragment).addToBackStack("Charts").commit();
}
break;
case R.id.toSettings:
if(currentFragment==null ||!(currentFragment instanceof DiaryFragment)){
currentFragment= new SettingsFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_right).replace(R.id.fragment_container,
currentFragment).addToBackStack("Settings").commit();
}
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}