效果如图:
先介绍下场景:
第一个Fragment为A
第二个Fragment为B
A在onCreateView的时候会自动去数据库读取数据。更新View。
然后
点击A的【修改】,可以在B里对A的三个数据进行修改,修改完毕后,保存到本地数据库里。
点击【确认】返回A。
然而这时候A的值没有变化,跟踪代码看,A在onCreateView的时候读取数据库了,而且数据库的值也是改动后的。值也赋上了。但是A显示的时候还是修改前的值。。
----------------------------------------------
第一次用Fragmeng,所以对他不了解,没办法,只好问度娘。
搜索了很久都没有百度到解决方法,后来在群里询问了一些网友,都没有解决。
最后没办法自己一点一点的试,一点一点的研究呗。
先分析了一下
一、使用回退栈回到Fragment-A的时候,是不是只是显示没有做更新,或者显示的Fragment本来就是一个缓存,而不是最新的。(百度也说到这一点了,但是很多都没有了下文。。)
二、是不是Fragment生命周期哪里搞错了。
我先从回退栈入手,在Fragment-A跳转到B的时候,把A关闭,或者脱离Activity。
第一个猜想操作失败。。
后来就测试第二个猜想,在Fragment生命周期中做文章。(这个也是我一同事提醒的。)
我一般写Fragment 都是实现下面3个方法:
public class VipFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
//....更新View
View view=inflater.inflate(R.layout.vip_fragment, null);
return view;
}
@Override
public void onPause() {
super.onPause();
}
根据Fragment生命周期发现:onResume()
所以在想,在这时候在修改View是不是就可以实现了。?
所以就做了如下修改:
public class VipFragment extends Fragment {
private View view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
//把view设置为全局变量
view=inflater.inflate(R.layout.vip_fragment, null);
return view;
}
@Override
public void onResume() {
//...更新View
super.onResume();
}
@Override
public void onPause() {
super.onPause();
}
然后运行。结果实现了。。
只能说自己运气还不错,如果这个问题解决不了,就会大改代码。
本来代码就很烂,再改改就不能见人了。- -
声明
欢迎转载,但请保留文章原始出处
[Iteye]-
http://jnwsczh.iteye.com/blog/2019456
- 大小: 28.1 KB
分享到:
相关推荐
Fragment回退栈是Android系统管理Fragment的一种机制,它模拟了浏览器的后退功能,用户可以通过点击设备上的返回按钮或者程序逻辑来触发回退操作。下面将详细介绍Android Fragment回退栈的原理、使用方法以及实践中...
Fragment回退栈是Android开发中的一个重要概念,尤其是在处理复杂用户界面和导航时。在这个案例中,我们将深入探讨Fragment回退栈的工作原理、如何使用以及它在实际应用中的常见实践。 首先,Fragment是Android SDK...
3. 使用`FragmentManager.addBackStack()`:当你添加新的Fragment时,可以将这个操作添加到回退栈,这样当用户点击返回键时,系统会自动处理回退。 ```java FragmentTransaction transaction = ...
当用户在应用中进行一系列的Fragment操作时,如添加或替换Fragment,这些操作会被记录在回退栈中,用户可以通过点击设备的返回键或者调用FragmentManager的popBackStack()方法来撤销这些操作,逐个返回到之前的状态...
本示例"Fragment回退栈小例子"将深入讲解如何管理Fragment的回退栈,以及其在实际应用中的工作原理。 首先,我们需要理解什么是回退栈(Back Stack)。在Android系统中,回退栈是一个LIFO(后进先出)的数据结构,...
- 如果使用`add()`,确保在回退栈中正确管理Fragment,以便在回退时正确恢复前一个Fragment。 - 在适当时使用`FragmentManager.findFragmentById()`或`FragmentManager.findFragmentByTag()`来检查容器中是否已有...
要实现点击返回键返回上一个Fragment,首先我们需要在添加新的Fragment到Activity时,将其添加到回退栈中。这可以通过`FragmentManager`的`beginTransaction()`方法实现。以下是一个示例: ```java FragmentManager...
4. **使用Fragment回退栈**: - 当我们在事务中调用`transaction.addToBackStack()`时,会将该事务添加到Fragment回退栈。这是一个管理Fragment历史记录的数据结构,它允许用户通过按返回键回退到先前的Fragment...
// 添加到后退栈,以便可以回退到先前的Fragment transaction.commit(); ``` 在处理Fragment时,通常我们会结合使用`beginTransaction()`、`commit()`和`addToBackStack()`。`addToBackStack()`用于将当前的...
在activity添加fragment,再在fragment再次添加多级fragment,如果不做处理,点击返回键,...我们可以通过在activity中监听返回事件,利用递归的方法,逐级检查fragmen,并popstack,达到返回上一级fragment的目的...
为了控制回退栈的行为,可以使用`addToBackStack()`方法,这使得用户可以通过按返回键回退到前一个Fragment。 2. **与Activity的通信**:Fragment与Activity之间的通信是双向的,通常通过`onAttach()`方法建立连接...
4. **利用FragmentManager和BackStack**: 当我们使用FragmentManager的beginTransaction().add()或replace()方法切换Fragment时,可以将操作添加到回退栈。这样,当用户点击返回按钮时,系统会自动恢复之前的状态。...
使用XML定义导航图,可以轻松地处理返回键和Fragment之间的跳转,自动管理回退栈。 7. **处理嵌套Fragment**: 当Fragment内嵌套其他Fragment时,返回键处理可能会更复杂。你需要确保最外层Fragment或者其所在的...
一个Fragment内可以包含其他Fragment,这种情况下需注意回退栈的管理,避免回退栈混乱。通常,使用`getChildFragmentManager()`来管理嵌套Fragment的事务。 9. **FragmentTransaction的动画** 可以为Fragment的...
// 如果需要回退栈支持,添加此行 transaction.commit(); ``` 2. **优化布局管理**:使用`FragmentTransaction`的`hide()`和`show()`方法来管理Fragment的可见性,而不是移除和添加。这有助于避免重叠并节省资源。...
8. **使用BackStack**:利用FragmentManager的BackStack功能,可以方便地管理和回退Fragment,防止因手动管理Fragment而导致的重叠问题。 通过以上方法,我们可以有效地避免Fragment重叠的问题,提高Android应用的...
- 使用`FragmentTransaction.replace()`方法,可以将现有Fragment替换为另一个Fragment,同时保留回退栈历史。 7. **Fragment的保存状态**: - 当Activity因配置改变(如屏幕方向改变)而重建时,Fragment的状态...
3. **堆栈管理**:使用add()和replace()方法都会将Fragment添加到回退栈中,用户可以通过按后退键返回上一个Fragment。若不想自动添加到回退栈,可以使用commitNow()替代commit()。 4. **通信与协作**:Fragment与...
4. 使用`onBackStackChangedListener`:监听BackStack变化,确保在正确的时机更新Fragment状态,防止因回退栈操作引发的重叠问题。 5. 更新UI:在Fragment的`onResume()`方法中更新UI,确保每次显示时Fragment的视图...
- 当使用`transaction.addToBackStack()`添加事务到回退栈时,用户可以通过点击后退键或调用`onBackPressed()`来撤销操作,回退栈会恢复之前的状态。 8. **处理配置变化**: - 当设备配置(如屏幕方向)改变时,...