onBackPressed()的问题不是刷新片段

时间:2015-04-21 05:14:14

标签: android sqlite android-fragments

在我的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中做背压事件。如果我错了,请纠正我,并建议我如何解决问题。

有人知道我是如何实现它的吗?

2 个答案:

答案 0 :(得分:1)

如果要添加到后台堆栈,则应使用fragmentTransaction.add()replace将只替换片段。

从逆堆栈处理pop的正确位置是通过使用这样的OnBackStackChangedListener

    getFragmentManager().addOnBackStackChangedListener(
       new FragmentManager.OnBackStackChangedListener() {
           @Override
           public void onBackStackChanged() {
            // find your fragment and do updates
           }
    });

一个很好的参考Fragments onResume from back stack

答案 1 :(得分:0)

当后退时,您的片段onResume将被调用,因此您可以在onResume中编写刷新代码

为了更好地理解,请参阅以下链接

http://developer.android.com/guide/components/fragments.html