Android 实现在Activity中操作刷新另外一个Activity数据列表

时间:2021-10-06 22:06:25

做android项目中遇到这样一个问题:有两个acticity,一个显示好友列表,另外一个显示会话列表,现在问题是在会话界面增加一个添加好友功能,添加好友后要求实时的刷新好友列表。

想了想,找了两种方式

方法一:通过声明要刷新的activity(FriendActivity)为静态变量,然后在一个activity(SessionActivity)中直接调用刷新方法

在FriendActivity中声明静态变量

[java] view plaincopy
  1. public static FriendActivity instance = null;
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. instance = this;
  7. initViews();
  8. }

在SessionActivity中直接调用FriendActivity中的刷新好友列表方法即可:

[java] view plaincopy
  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
  3. if (requestCode == REQUEST_CODE_NEW_CONTACT && resultCode == RESULT_OK) {
  4. FriendActivity.instance.reFreshFriendList();
  5. }
  6. }

当然,这种方式使用的是静态变量,你需要及时释放内存。

第二种方法:使用广播机制,在SessionActivity添加好友时进行广播,而FriendActivity中通过动态注册广播消息进行receive,当接受到消息时,在FriendActivity中自己进行更新

SessionActivity添加好友时进行广播:

[java] view plaincopy
  1. // 广播通知
  2. Intent intent = new Intent();
  3. intent.setAction("action.refreshFriend");
  4. sendBroadcast(intent);

FriendActivity中通过动态注册广播消息

[java] view plaincopy
  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. IntentFilter intentFilter = new IntentFilter();
  6. intentFilter.addAction("action.refreshFriend");
  7. registerReceiver(mRefreshBroadcastReceiver, intentFilter);
  8. initViews();
  9. }
  10. // broadcast receiver
  11. private BroadcastReceiver mRefreshBroadcastReceiver = new BroadcastReceiver() {
  12. @Override
  13. public void onReceive(Context context, Intent intent) {
  14. String action = intent.getAction();
  15. if (action.equals("action.refreshFriend"))
  16. {
  17. reFreshFrinedList();
  18. }
  19. }
  20. };

这样就很好的实现了在一个Activity中实时刷新另外一个Activity数据列表,这种方式更加的灵活方便。

最后,不要忘记销毁注册

[java] view plaincopy
  1. @Override
  2. protected void onDestroy() {
  3. super.onDestroy();
  4. unregisterReceiver(mRefreshBroadcastReceiver);
  5. }