`
M.c
  • 浏览: 16598 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

解决Fragment 使用回退栈,返回上一Fragment不刷新问题!

阅读更多
效果如图:

先介绍下场景:
第一个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
分享到:
评论

相关推荐

    android Fragment回退栈简单示例

    Fragment回退栈是Android系统管理Fragment的一种机制,它模拟了浏览器的后退功能,用户可以通过点击设备上的返回按钮或者程序逻辑来触发回退操作。下面将详细介绍Android Fragment回退栈的原理、使用方法以及实践中...

    fragment回退栈案例

    Fragment回退栈是Android开发中的一个重要概念,尤其是在处理复杂用户界面和导航时。在这个案例中,我们将深入探讨Fragment回退栈的工作原理、如何使用以及它在实际应用中的常见实践。 首先,Fragment是Android SDK...

    点击退出返回上一个Fragment

    3. 使用`FragmentManager.addBackStack()`:当你添加新的Fragment时,可以将这个操作添加到回退栈,这样当用户点击返回键时,系统会自动处理回退。 ```java FragmentTransaction transaction = ...

    Android Fragment的回退栈示例详细介绍

    当用户在应用中进行一系列的Fragment操作时,如添加或替换Fragment,这些操作会被记录在回退栈中,用户可以通过点击设备的返回键或者调用FragmentManager的popBackStack()方法来撤销这些操作,逐个返回到之前的状态...

    Fragmeng回退栈小例子

    本示例"Fragment回退栈小例子"将深入讲解如何管理Fragment的回退栈,以及其在实际应用中的工作原理。 首先,我们需要理解什么是回退栈(Back Stack)。在Android系统中,回退栈是一个LIFO(后进先出)的数据结构,...

    Android中Fragment管理及重叠问题的解决方法

    - 如果使用`add()`,确保在回退栈中正确管理Fragment,以便在回退时正确恢复前一个Fragment。 - 在适当时使用`FragmentManager.findFragmentById()`或`FragmentManager.findFragmentByTag()`来检查容器中是否已有...

    Android中返回上一个Fragment

    要实现点击返回键返回上一个Fragment,首先我们需要在添加新的Fragment到Activity时,将其添加到回退栈中。这可以通过`FragmentManager`的`beginTransaction()`方法实现。以下是一个示例: ```java FragmentManager...

    多个fragment嵌套,返回上级fragment例子

    4. **使用Fragment回退栈**: - 当我们在事务中调用`transaction.addToBackStack()`时,会将该事务添加到Fragment回退栈。这是一个管理Fragment历史记录的数据结构,它允许用户通过按返回键回退到先前的Fragment...

    Fragment后退栈和add,remove,replace的基本使用

    // 添加到后退栈,以便可以回退到先前的Fragment transaction.commit(); ``` 在处理Fragment时,通常我们会结合使用`beginTransaction()`、`commit()`和`addToBackStack()`。`addToBackStack()`用于将当前的...

    多级Fragment监听返回,逐级回退

    在activity添加fragment,再在fragment再次添加多级fragment,如果不做处理,点击返回键,...我们可以通过在activity中监听返回事件,利用递归的方法,逐级检查fragmen,并popstack,达到返回上一级fragment的目的...

    Android Fragment 的基本使用(二)回退栈管理、与AC通信、状态恢复

    为了控制回退栈的行为,可以使用`addToBackStack()`方法,这使得用户可以通过按返回键回退到前一个Fragment。 2. **与Activity的通信**:Fragment与Activity之间的通信是双向的,通常通过`onAttach()`方法建立连接...

    Android解决多个Fragment切换时布局重新实例化问题,并保存当前fragment页面,系统回收后还原之前fragment页面,更新版

    4. **利用FragmentManager和BackStack**: 当我们使用FragmentManager的beginTransaction().add()或replace()方法切换Fragment时,可以将操作添加到回退栈。这样,当用户点击返回按钮时,系统会自动恢复之前的状态。...

    android 控制fragment返回

    使用XML定义导航图,可以轻松地处理返回键和Fragment之间的跳转,自动管理回退栈。 7. **处理嵌套Fragment**: 当Fragment内嵌套其他Fragment时,返回键处理可能会更复杂。你需要确保最外层Fragment或者其所在的...

    Android Fragment使用示例

    一个Fragment内可以包含其他Fragment,这种情况下需注意回退栈的管理,避免回退栈混乱。通常,使用`getChildFragmentManager()`来管理嵌套Fragment的事务。 9. **FragmentTransaction的动画** 可以为Fragment的...

    Fragment多个的切换重叠问题解决

    // 如果需要回退栈支持,添加此行 transaction.commit(); ``` 2. **优化布局管理**:使用`FragmentTransaction`的`hide()`和`show()`方法来管理Fragment的可见性,而不是移除和添加。这有助于避免重叠并节省资源。...

    Fragment重叠解决方案

    8. **使用BackStack**:利用FragmentManager的BackStack功能,可以方便地管理和回退Fragment,防止因手动管理Fragment而导致的重叠问题。 通过以上方法,我们可以有效地避免Fragment重叠的问题,提高Android应用的...

    Android之Fragment的基本使用

    - 使用`FragmentTransaction.replace()`方法,可以将现有Fragment替换为另一个Fragment,同时保留回退栈历史。 7. **Fragment的保存状态**: - 当Activity因配置改变(如屏幕方向改变)而重建时,Fragment的状态...

    fragment使用完整例子

    3. **堆栈管理**:使用add()和replace()方法都会将Fragment添加到回退栈中,用户可以通过按后退键返回上一个Fragment。若不想自动添加到回退栈,可以使用commitNow()替代commit()。 4. **通信与协作**:Fragment与...

    Android关于Fragment重叠问题分析和解决

    4. 使用`onBackStackChangedListener`:监听BackStack变化,确保在正确的时机更新Fragment状态,防止因回退栈操作引发的重叠问题。 5. 更新UI:在Fragment的`onResume()`方法中更新UI,确保每次显示时Fragment的视图...

    动态使用Fragment

    - 当使用`transaction.addToBackStack()`添加事务到回退栈时,用户可以通过点击后退键或调用`onBackPressed()`来撤销操作,回退栈会恢复之前的状态。 8. **处理配置变化**: - 当设备配置(如屏幕方向)改变时,...

Global site tag (gtag.js) - Google Analytics