yokeyword / fragmentation Goto Github PK
View Code? Open in Web Editor NEW[DEPRECATED] A powerful library that manage Fragment for Android
License: Apache License 2.0
[DEPRECATED] A powerful library that manage Fragment for Android
License: Apache License 2.0
如果在fragment的onCreateView()或onViewCreated()方法中直接显示ProgressDialog或加载List,在过场动画的执行的时候会突然很明显的卡壳一下.有没有好办法解决?
fragmentManager.getFragments()返回的fragment序列可能与实际的顺序不一致,导致无法获取正确的栈顶fragment
首先谢谢作者的贡献.
如题所问, 这个框架是实验室产品还是已经被某个大用户量的App所采用, 经历了Android 多机型适配的考验, 相对稳定可靠了?
再次感谢!
popToChild如何实现动画效果?
@YoKeyword
你好,在你的新版本中是在Activity中创建一开始就创建几个fragment,能否不这么做?
你的思路是一进Activity就通过以下代码创建了几个fragment
`if (savedInstanceState == null) {
mFragments[FIRST] = MultiFirstFragment.newInstance();
mFragments[SECOND] = MultiSecondFragment.newInstance();
mFragments[THIRD] = MultiThirdFragment.newInstance();
mFragments[FOURTH] = MultiFourthFragment.newInstance();
loadMultipleRootFragment(R.id.fl_container, FIRST,
mFragments[FIRST],
mFragments[SECOND],
mFragments[THIRD],
mFragments[FOURTH]);
} else {
// 这里库已经做了Fragment恢复,所有不需要额外的处理了, 不会出现重叠问题
// 这里我们需要拿到mFragments的引用,也可以通过getSupportFragmentManager.getFragments()自行进行判断查找(效率更高些),用下面的方法查找更方便些
mFragments[FIRST] = findFragment(MultiFirstFragment.class);
mFragments[SECOND] = findFragment(MultiSecondFragment.class);
mFragments[THIRD] = findFragment(MultiThirdFragment.class);
mFragments[FOURTH] = findFragment(MultiFourthFragment.class);
}`
然后根据底部的BottomBar来切换,通过代码showHideFragment(mFragments[position], mFragments[prePosition]);
来隐藏或者显示以达到切换fragment的目的。你这里是做了Fragment的恢复。
但是假如这里面的每个fragment都有网络请求,那样就会一进Activity就都访问了网络,这样不是很好,有的fragment可能用户压根就不会点击进去,所以白白耗费了流量。是否有个比较好的法子,懒加载的方式,用户点击了才底部相应的icon才创建这个fragment。这样会好一些。不知道是不是我的理解有错误,或者你还有一套新的方案我不知道的。支持你
I am initiating my one of fragment by below code. (i.e. WishList Frgagment)
mFragments[FOURTH] = WishListContainerFragment.newInstance();
i have five tabs in bottombar for your refrence.
public class WishListContainerFragment extends BaseLazyMainFragment {
public static WishListContainerFragment newInstance() {
Bundle args = new Bundle();
WishListContainerFragment fragment = new WishListContainerFragment();
fragment.setArguments(args);
return fragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.multi_container_fragment, container, false);
return view;
}
@Override
protected void initLazyView(@Nullable Bundle savedInstanceState) {
/*Need to call every time when user presses on same tab.*/
if (savedInstanceState == null) {
boolean isUserLoggedIn = AppGlobal.getBooleanPreference(_mActivity, AppConstant.PREF_IS_USER_LOGGED_IN);
if (isUserLoggedIn){
loadRootFragment(R.id.fl_child_container, WishListFragmentNew.newInstance());
}else{
loadRootFragment(R.id.fl_child_container, LoginContainerFragment.newInstance());
}
}
}
}
Now i want to call initLazyView every time when user presses on same tab. How should i achieve that?
or is there any other recommendation by you for archiving same thing? i want to replace rootContainerFragment on same tab, based on some situations. for example user logged in or not.
Please reply asap. Thanks in advance.
比如 依次点击 A B C D 四个同级Fragment,返回时候 可以回退吗, 现在 同级的demo 是返回第一个
Hi,
When "BaseBackFragment" is extended by a fragment, the BACK Button is shown on the TOOLBAR, but if the user swipe from the left edge of the screen the NAVIGATION DRAWER pops open.
Can you implement a method of something so that what the "BaseBackFragment" is extended, the NAVIGATION DRAWER will be disabled, and when the user presses the BACK button the NAVIGATION DRAWER will be enabled.
Thanks so much for this awesome library.
您好。
demo中,进入startForResult页面后,旋转screen方向,返回,二级详情页面的数据就没有了,但是再次旋转screen(停留在详情页面),数据又恢复了。
onEnterAnimationEnd()去加载缓存数据的时候就会在动画结束了但视图还没改变完成的时候会卡顿一下。
阅读了您在简书上的文章,有几个问题咨询一下:
1、按照你的说法 remove是有问题的,为什么startWithPop中调用了fragmentManager.beginTransaction().remove(from).commit();接口
2、startWithPop中调用了handleBack(); handleBack()中调用了fragmentManager.popBackStack();
紧接着在startWithPop中调用了事物处理,FragmentTransaction ft = fragmentManager.beginTransaction()
.setTransition(
FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.add(from.getContainerId(), to, toName)
.addToBackStack(toName);
按照你文章的说法:"如果你想在出栈后,立刻beginTransaction()开始一项事务,你应该把事务的代码post到主线程的消息队列里',但是您的startWithPop没有通过post方法。
是不是只有调用popBackStackImmediate才使用post方法,因为:popBackStackImmediate是立刻出栈,popBackStack是放在主线程尾部
能否在不包含侧滑菜单的时候,添加一个侧滑返回,边缘finish当前Fragment,或者能给一些提示不?谢了
@YoKeyword
你好,SwipeBackActivity这个用在我项目里,只有简单的Activity(比如Activity里没有fragment)才可以侧滑退出。
于是我尝试着在你项目里的三个Activity全加上SwipeBackActivity,
同时都加了getSwipeBackLayout().setEdgeOrientation(SwipeBackLayout.EDGE_ALL);
三个Activity也都设置了 true
只有EnterActivity和flow.MainActivity这两个Activity有侧滑效果,唯独仿知乎的那个Activity没有侧滑退出效果。我的项目也是类似你仿知乎的demo,内嵌很多平级fragment,也没有侧滑退出效果,但是简单的Activity就有侧滑退出效果。我用的系统版本是4.2的真机和系统版本是4.4的模拟器,两者都如上所述。
你有空可以看看是不是有这个问题。
我估计是滑动事件被拦截了还怎么个原因。^_^
你好,请问使用您的框架后,如何让fragment只创建一次?
我现在的需求类似于你仿知乎的主页,底部有个底部导航BottomBar, 用的是一个第三方的。现在来回切换的时候总是重新创建,请求网络。我现在想只在第一次点击开的时候创建fragment,请求网络获取数据,以后再点击到这一项的时候只要show。我看了你的代码有有个showHideFragment(mFragments[position], mFragments[prePosition]);
我用的这个BottomBar在点击选中回调public void onTabSelected(int position, boolean wasSelected)
没有int prePosition这种参数。
请问我要怎么来隐藏之前的fragment,是用getTopFragment();吗?
bottomNavigation.setOnTabSelectedListener(new AHBottomNavigation.OnTabSelectedListener() {
@OverRide
public void onTabSelected(int position, boolean wasSelected) {
switch (position) {
case 0:
YaLiJiFragment fragment0 = findFragment(YaLiJiFragment.class);
if (fragment0 == null) {
popTo(YaLiJiFragment.class, false, new Runnable() {
@OverRide
public void run() {
start(YaLiJiFragment.newInstance());
}
});
} else {
// 如果已经在栈内,则以SingleTask模式start
start(fragment0, SupportFragment.SINGLETASK);
}
break;
case 1:
WannengjiFragment fragment1 = findFragment(WannengjiFragment.class);
if (fragment1 == null) {
popTo(YaLiJiFragment.class, false, new Runnable() {
@Override
public void run() {
start(WannengjiFragment.newInstance());
}
});
} else {
// 如果已经在栈内,则以SingleTask模式start
start(fragment1, SupportFragment.SINGLETASK);
}
break;
case 2:
LaboratoryStatisticFragment fragment3 = findFragment(LaboratoryStatisticFragment.class);
if (fragment3 == null) {
popTo(YaLiJiFragment.class, false, new Runnable() {
@Override
public void run() {
start(LaboratoryStatisticFragment.newInstance());
}
});
} else {
// 如果已经在栈内,则以SingleTask模式start
start(fragment3, SupportFragment.SINGLETASK);
}
break;
}
}
});
用了最新版,在项目中使用发现快速点击还是有启动多种情况的问题。我log的结果是动画执行完毕,页面已经启动还没完全显示的时候,可以点击到下面的fragment
你好,我同级别的实现不重复加载。
现在遇到一个问题。
我有MainFragment/BFragment/CFragment/DFragment
在普通的切换时候已经实现了不重复加载。通过add/show来控制实现的。
但是现在我的CFragment中,需要传递一个Type,来区分CFragment要去加载什么数据。
第一次,进入时候是正常的。
CFragment中有一个按钮,可以选择Type,我点击该按钮,选择另外一个类型时候,这个时候需要重新刷新该页面,这块控制逻辑有点懵了。。
感谢您抽出宝贵时间指教下。
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Bundle bundle = new Bundle();
Fragment fragment = null;
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
mSpinnerAdapter.setCheckPos(position);
switch (position) {
case 1:
bundle.putSerializable("mType", MaopaoListFragment.Type.friends);
maopaoListFragment = new MaopaoListFragment_().newInstance(MaopaoListFragment.Type.friends);
maopaoListFragment.setArguments(bundle);
ft.add(R.id.container, maopaoListFragment, strings[position]);
break;
case 2:
bundle.putSerializable("mType", MaopaoListFragment.Type.hot);
maopaoListFragment = new MaopaoListFragment_().newInstance(MaopaoListFragment.Type.hot);
maopaoListFragment.setArguments(bundle);
ft.add(R.id.container, maopaoListFragment, strings[position]);
break;
case 0:
default:
bundle.putSerializable("mType", MaopaoListFragment.Type.time);
maopaoListFragment = new MaopaoListFragment_().newInstance(MaopaoListFragment.Type.time);
maopaoListFragment.setArguments(bundle);
ft.add(R.id.container, maopaoListFragment, strings[position]);
break;
}
0.7用着相当爽啊,解决了我很多问题,但是想在hide和show的时候也有转场动画。自己扩展了一下,但是setFragmentClickable()
状态有时不对
微信的 底部fragment 好像可以左右滑动额
Fragmentation中代码
void dispatchStartTransaction(SupportFragment from, SupportFragment to, int requestCode,
int launchMode, int type) {
//省略
// 这里将Activity的Clickable标识设置为false,在SingleTask/SingleTop启动模式之后 开启防抖动
mActivity.setFragmentClickable(false);
//省略
}
这里将Clickable设置为false
SupportFragment中代码
private void handleNoAnim() {
//如果在Activity或Fragment设置了进入动画,mNeedDebounce为false
if (mFragmentAnimator.getEnter() == 0) {
mNeedDebounce = true;
mFragmentAnimator.setEnter(R.anim.no_anim);
}
}
private void initAnim() {
handleNoAnim();
mNoAnim = AnimationUtils.loadAnimation(_mActivity, R.anim.no_anim);
mEnterAnim = AnimationUtils.loadAnimation(_mActivity, mFragmentAnimator.getEnter());
//省略
//mNeedDebounce为false,
if (mNeedDebounce) {
_mActivity.setFragmentClickable(true);
}
//这里并没有给mNoAnim设置监听, 监听动画状态(for防抖动)
mEnterAnim.setAnimationListener(new DebounceAnimListener());
}
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
if (_mActivity.mPopMulitpleNoAnim || mLocking) {
return mNoAnim;
}
if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) {
if (enter) {
if (mIsRoot) {
//满足条件很简单,由于只是给 mEnterAnim设置了动画监听,mNoAnim结束后无法还原
//Activity的点击状态
return mNoAnim;
}
return mEnterAnim;
} else {
return mPopExitAnim;
}
} else if (transit == FragmentTransaction.TRANSIT_FRAGMENT_CLOSE) {
if (enter) {
return mPopEnterAnim;
} else {
return mExitAnim;
}
}
return null;
}
发现你的代码在打开一个新fragment(要加入回退栈)的时候,会隐藏from这个fragment,这样做可以避免过度绘制。用DialogFragment的show方法的话,也能做到同样的效果,不用隐藏from的fragment了,而且不用指定containerId,只要把style指定成全屏的就行。不知道这种方式会不会更好。
当一个Fragment或者Activity中有多个rootFragment, 如何获取当前显示的fragment?
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.everytime/com.everytime.ui.main.MainActivity}: java.lang.NullPointerException: Attempt to read from field 'boolean android.support.v4.app.BackStackRecord.mAddToBackStack' on a null object reference
好像是只要在App上次是崩溃的情况下,再进去就会发生这样的情况,卸载了再重装也会这样 ,很奇怪。
if (savedInstanceState == null) {
loadRootFragment(R.id.container, TopicFragment.newInstance());
}
这里是调用代码的地方
在右滑退出的fragment中滑动时,如果不从边缘触发,那么滑动左右滑动手势会被识别成点击,从而触发点击事件,而且必现
业务逻辑比较麻烦,viewPager + Fragment 顶部的导航条根据返回的数据动态添加。
总共三种类型,就分了三个Fragment。在 ViewPagerAdapter getItem中用newInstance(id)来获取,id不相同。
RecyclerView 在不同的Fragment里面是用的不同的id的,在OnCreateView里面 initView(view)初始化。
在 OnDestroyView() 里 mRecy_news.getRefreshableView().setAdapter(null);
但是在左右滑动的时候出现了下面的错误代码,并且闪退。
E/InputEventReceiver: Exception dispatching input event.
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.support.v7.widget.RecyclerView$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/fragmetn_own_pager_rv. Make sure other views do not use the same id.
at android.view.View.onRestoreInstanceState(View.java:13810)
at com.handmark.pulltorefresh.library.PullToRefreshBase.onRestoreInstanceState(PullToRefreshBase.java:833)
at android.view.View.dispatchRestoreInstanceState(View.java:13786)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2889)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2897)
at android.view.View.restoreHierarchyState(View.java:13764)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:465)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1094)
at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1430)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:732)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1177)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1025)
at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:2050)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1960)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2390)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1734)
at android.app.Activity.dispatchTouchEvent(Activity.java:2830)
at me.yokeyword.fragmentation.SupportActivity.dispatchTouchEvent(SupportActivity.java:240)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2351)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407)
搜索了很久,试验了重写ViewPager捕捉异常,view判断为空复用,判断Recycler状态再初始化,都没用。
android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1493)
2 android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1511)
3 android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638)
4 android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:617)
5 whatsmode.com.mode2.app.Fragmentation.showHideFragment(Fragmentation.java:191)
6 whatsmode.com.mode2.app.SupportFragment.showHideFragment(SupportFragment.java:382)
7 whatsmode.com.mode2.module.feed.view.fragment.MainFragment$1.onTabSelected(MainFragment.java:126)
8 whatsmode.com.mode2.ui.BottomBar$1.onClick(BottomBar.java:74)
9 android.view.View.performClick(View.java:5697)
10 whatsmode.com.mode2.ui.BottomBar$2.run(BottomBar.java:97)
11 android.os.Handler.handleCallback(Handler.java:739)
12 android.os.Handler.dispatchMessage(Handler.java:95)
13 android.os.Looper.loop(Looper.java:158)
14 android.app.ActivityThread.main(ActivityThread.java:7237)
15 java.lang.reflect.Method.invoke(Native Method)
16 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
17 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
我研究你的仿知乎的demo的时候,想增加一个需求,从一个新的activity跳转到ViewPagerFragment下的热门这个页面。。
我用的以下方式
mFragments[SECOND].findChildFragment(ViewPagerFragmentMy.class).switchFragment(1);这种方式会报下面的空指针,一脸懵逼啊,跪求大神赐教
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'me.yokeyword.fragmentation.SupportFragment me.yokeyword.fragmentation.Fragmentation.findStackFragment(java.lang.Class, android.support.v4.app.FragmentManager, boolean)' on a null object reference
真心希望大神在百忙之中劳神看看是什么问题。。。
感谢作者给出的干货。都是赤裸裸的经验啊。收下我的膝盖。
现在也是用1个Activity来管理fragment(听了QQ音乐的人说他们是这样做的。所以尝试了下)
遇到一个问题fragment的pop动画没有显示。push动画正常走
public void pushFragment(Fragment toFragment) {
if (toFragment == null) return;
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.push_right_in, R.anim.push_right_out)
.add(R.id.fl_common_frame, toFragment, toFragment.getClass().getName())
.addToBackStack(toFragment.getClass().getName())
.commit();
}
还有一个问题,快速点击的时候,会弹出好几个fragment ,有遇到吗?
谢谢~Gn
1,如果添加了viewTreeoberser,就是那个监听viewtree创建完成的事件,会导致fragment的动画不能正常显示;
2,如果在onhidedchanged 里操作view会让fragment动画不能正常展示,(会有个奇怪的延迟)
A activity is a SupportActivity,A open an Activity B,B is a normal Activity.
When at B press back key,A show slow(probably 3 sec).
I debug all A activity function onResume() cost 35ms, onPostResum() cost 300400ms
Does any one know what cause this problem?
https://github.com/universitydog/ape-theory-app 这是我的项目地址代码,请查看更新于05/21之前的版本。我在baseviewfragment里面给返回icon设置pop点击,但是界面返回了,栈没清除。
还在更改,可能代码会变动。
您好,您的项目我也有在使用,我想问一个非项目相关的问题,最近我在为把自己的项目上传到jcenter发愁,我看到您项目中也包含了javadoc注释,并且已经上传到jcenter了。有几个问题想请教一下您:
我根据你的demo调用的。
MainFragment_ mainFragment = findFragment(MainFragment_.class);
if (mainFragment == null) {
popTo(MainFragment_.class, false, new Runnable() {
@OverRide
public void run() {
start(MainFragment_.newInstance());
}
});
} else {
// 如果已经在栈内,则以SingleTask模式start
start(mainFragment, SupportFragment.SINGLETASK);
}
首页好像是不自动加载了,但是切换到其它同级Fragment时候,每次都要重新加载,用Fragmentation可以解决吗?求解答,急~~万分感谢!
如题
请问一下compile 'me.yokeyword:fragmentation-swipeback:0.3.0'和你的另一个项目compile 'me.yokeyword:swipebackfragment:0.1.1'有什么区别吗?
我在Fragmentation中最好引用哪个?
onDestroyView 怎么进行 状态 保持 与恢复???
我在build.gradle导入了compile 'me.yokeyword:fragmentation:0.5.3'
却报如题的错误。怎么解决?
gradle的版本是2.10
classpath 'com.android.tools.build:gradle:2.0.0'
When i open proguard ,There are many issues
Like This:
buildTypes {
release {
debuggable false
minifyEnabled true //是否开启混淆
shrinkResources true //此属性配合minifyEnabled混淆使用
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
minifyEnabled true //是否开启混淆
shrinkResources true //此属性配合minifyEnabled混淆使用
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
这个不算ISSUE, 顶多算个提示, setFramgentResult()
应该是拼写有误,Framgent
应该是 Fragment
, 一起完善这个库😀
我开启 『开发者选项』->『不保留活动』 运行您的 Demo ,然后按下 Home 键,再次打开 app 没有被杀掉,或者是自动恢复了我没看出来。
QQ 和 微信 都是 10s 后就重启了。我自己用您的库也会重启,有时候Fragment 可以恢复,但是有些变量报空指针,这样即使 Fragment 恢复 意义也不是很大。
请问这种问题有什么解决办法。
比如demo里,在微信的一个tab页,进入循环页面,点击一个按钮,需要触发“销毁所有的循环页,并且切换到第二个tab页的第二个标签(陌生人)”,不知道是否能实现这个逻辑?
主界面的Activity有中的Fragment没有全屏展示,但是新的fragment全屏展示了,有部分类容被状态栏挡住了。主Activity侧滑时背景是黑色,也在主题中设置了true
关闭fragment的动画怎么改呀
如何显示一个透明的Fragment,源码里直接给设置成了windowBackground
我在adapter中跳转到新的fragment 参数没带过去 ,有空给看看呗
ReceiptDetailsPage fragment = mFragment.findFragment(ReceiptDetailsPage.class);
if (fragment == null) {
fragment = ReceiptDetailsPage.newInstance();
}else{
Bundle newBundle = new Bundle();
newBundle.putSerializable("RECEIPT_DATA_TO_HTML", dataToHtml);
// 传递的bundle数据,会调用目标Fragment的onNewBundle(Bundle newBundle)方法
fragment.putNewBundle(newBundle);
}
// homeFragment以SingleTask方式启动
mFragment.start(fragment,SupportFragment.SINGLETASK);
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.