2012-08-14 79 views
4

我有活动A with listView,用户单击任何启动活动B的项目。根据用户在活动B中所做的操作,B可能会更改活动A上的listView。Android:当活动返回到前一活动时检测

所以我的问题:

我怎么能告诉活性的,它是从何时活动B中的用户返回到它恢复?

我希望能够在activity A返回时发出listView的刷新信号。

谢谢!

回答

5

您可以添加代码以刷新列表视图活动A的onResume()

@Override 
protected void onResume() { 
    super.onResume(); 
    //Code to refresh listview 
} 
+0

这很像一个魅力。谢谢 – 2012-08-14 05:49:08

+0

请注意,这也被称为其他场合,如活动开始,设备轮换等,而不仅仅是从活动B返回。 – 2016-05-22 00:17:29

1

使用startActivityForResult启动B活动。并检查活动B的活动A onActivityResult()方法中的数据。使用notifyDataSetChanged为listView更新内容。

2

使用startActivityForResult是最优雅的方式来做到这一点。 OnResume会在每次关闭并打开应用程序时发生,这会使用更多的资源,尤其是在刷新大量数据的情况下。

声明请求代码为常数,在您的活动的顶部:

public static final int OPEN_NEW_ACTIVITY = 123456; 

将这个你开始新的活动:

Intent intent = new Intent(this, NewActivity.class); 
startActivityForResult(intent, OPEN_NEW_ACTIVITY); 

做一些活动时结束。文档建议您使用resultCode,但根据具体情况,按下按钮时,结果可以是RESULT_OKRESULT_CANCELED。所以我会放弃它。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == OPEN_NEW_ACTIVITY) { 
     // Refresh your ListView here 
     // .... 
    } 
} 

由于某种原因,我在将它放入碎片时遇到了麻烦。所以你必须把它放在活动中。

0

我有另一种方式来做到这一点,这可能会在某些情况下,来方便 - 我把私人捆绑变量,我们称之为state,当我开始一个活动,我把一个字符串,说我开始哪项活动:

state.putString("startedActivity", "A"); 
Intent intent = new Intent(this, ActivityA.class); 
startActivity(intent); 

我存储状态束坚持不懈设备改变(旋转等):

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putAll(state); 
} 

onCreate我加载状态:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState == null) { 
     savedInstanceState = new Bundle(); 
    } 
    state = savedInstanceState; 
} 

然后在onResume方法中,我可以检查,我是否只是在某个活动。请注意,我立即从状态中删除字符串,因此它不会在轮换等情况下再次显示。

public void onResume() { 
    super.onResume(); 
    if (state.getString(STARTED_ACTIVITY, null) != null) { 
     // we just came from another activity! 
     state.putString(STARTED_ACTIVITY, null); // clear the state 
     // do whatever you need 
    } 
} 
+0

嗯,我这样做,它的工作,但实际上@ Muz的答案是一样的,更简单,所以如果你需要知道,使用他的,你是否真的从孩子的活动回来。 – 2016-05-22 00:15:48