片段过渡不起作用
Fragment Transition not working
在我的应用程序中,我有 3 个选项卡(按钮),在滑动时我正在更改 fragment.So 为此,我正在使用向左滑动和向右滑动 animations.But 它似乎对我不起作用。
Slide_Left
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:propertyName="x"
android:valueFrom="2000"
android:valueTo="0"
android:valueType="floatType" />
</set>
片段调用
try {
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = activity.getFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) {
FragmentTransaction ft = manager.beginTransaction();
ft.replace(id, fragment, fragmentTag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.setCustomAnimations(R.animator.slide_in, R.animator.slide_out);
ft.addToBackStack(backStateName);
ft.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
使用 SlidingTabLayout 和 ViewPager 而不是这个手动动画...
参考以下 link ...
这简单
https://developer.android.com/samples/SlidingTabsBasic/src/com.example.android.common/view/SlidingTabLayout.html
private class SlideAdapter extends FragmentStatePagerAdapter {
public SlideAdapter(FragmentManager supportFragmentManager) {
super(supportFragmentManager);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return your_first_fragment_object;
case 1:
return your_first_fragment_object;
}
return null;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Your First tab";
case 1:
return "Your Second tab";
}
return super.getPageTitle(position);
}
@Override
public int getCount() {
return 2; // No of tab you want
}
}
就是这样...
现在只需使用 setAdapter() 将此适配器分配给 ViewPager
...
可能会有帮助
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
frag = UsageRecoSummaryFragemrent.newInstance(position);
// changeColor(newColor);
break;
case 1:
frag = SmsDetailsFrag.newInstance(position);
break;
case 2:
frag = CallDetailsFragment.newInstance(position);
break;
case 3:
frag = MobileDataUsageFragment.newInstance(position);
break;
default:
break;
}
fragmentReferences.put(position, new WeakReference<Fragment>(frag));
return frag;
}
在我的应用程序中,我有 3 个选项卡(按钮),在滑动时我正在更改 fragment.So 为此,我正在使用向左滑动和向右滑动 animations.But 它似乎对我不起作用。
Slide_Left
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:propertyName="x"
android:valueFrom="2000"
android:valueTo="0"
android:valueType="floatType" />
</set>
片段调用
try {
String backStateName = fragment.getClass().getName();
String fragmentTag = backStateName;
FragmentManager manager = activity.getFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) {
FragmentTransaction ft = manager.beginTransaction();
ft.replace(id, fragment, fragmentTag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.setCustomAnimations(R.animator.slide_in, R.animator.slide_out);
ft.addToBackStack(backStateName);
ft.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
使用 SlidingTabLayout 和 ViewPager 而不是这个手动动画... 参考以下 link ... 这简单 https://developer.android.com/samples/SlidingTabsBasic/src/com.example.android.common/view/SlidingTabLayout.html
private class SlideAdapter extends FragmentStatePagerAdapter {
public SlideAdapter(FragmentManager supportFragmentManager) {
super(supportFragmentManager);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return your_first_fragment_object;
case 1:
return your_first_fragment_object;
}
return null;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Your First tab";
case 1:
return "Your Second tab";
}
return super.getPageTitle(position);
}
@Override
public int getCount() {
return 2; // No of tab you want
}
}
就是这样... 现在只需使用 setAdapter() 将此适配器分配给 ViewPager ...
可能会有帮助
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
frag = UsageRecoSummaryFragemrent.newInstance(position);
// changeColor(newColor);
break;
case 1:
frag = SmsDetailsFrag.newInstance(position);
break;
case 2:
frag = CallDetailsFragment.newInstance(position);
break;
case 3:
frag = MobileDataUsageFragment.newInstance(position);
break;
default:
break;
}
fragmentReferences.put(position, new WeakReference<Fragment>(frag));
return frag;
}