在我的Android应用程序中,我的Activity,A和B中有两个片段。
在“A”片段中,我开发了一种形式,并且在该形式中,一些数据来自数据库。我使用了一个片段事务,用片段“B”替换了片段“A”。
以下是我用FragmentB替换Fragment A的代码。
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
FragmentB reload = new FragmentB();
fragmentTransaction.replace(android.R.id.content,reload);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
在“B”片段中,我从服务器获取数据并将其存储在SQLite数据库中,以便我们可以使用应用程序中的最新数据。当我单击后退按钮时,它将返回到片段“A”,但片段“A”中的所有数据都不会根据新重新加载的数据进行刷新。
以下是我重写onBackPressed()
方法的主要活动代码:
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
getFragmentManager().popBackStack();
}
当我点击主要活动的后退按钮时,我想用数据库中的最新值刷新Fragment A的数据。我知道我们不能在片段B中做背压事件。如果我错了,请纠正我,并建议我如何解决问题。
有人知道我是如何实现它的吗?
答案 0 :(得分:1)
如果要添加到后台堆栈,则应使用fragmentTransaction.add()
。 replace
将只替换片段。
从逆堆栈处理pop的正确位置是通过使用这样的OnBackStackChangedListener
getFragmentManager().addOnBackStackChangedListener(
new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
// find your fragment and do updates
}
});
答案 1 :(得分:0)
当后退时,您的片段onResume
将被调用,因此您可以在onResume中编写刷新代码
为了更好地理解,请参阅以下链接
http://developer.android.com/guide/components/fragments.html