从另一个活动重新创建/重启活动

5
我看到了这个问题,但没有得到很好的答案,而且我的情况有些不同。我有两个Activity A和B。从Activity A启动Activity B,但Activity A必须保持打开状态。现在,在我登录Activity B后,我会将一些数据保存在Shared Preferences中,并且我需要Activity A的布局根据共享偏好值进行更改。因此,在登录后,Activity A必须重新创建以应用更改,但仍然应该在Activity B后面。
我的问题是:是否可能从Activity B重新创建Activity A?

为什么需要重新创建活动A?你为什么不在登录后从活动B发送消息到活动A,告诉它更新自己呢?有几种方法可以实现,但在这种情况下,我认为最自然的方式是使用http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int) 在活动A中启动活动B。 - Leo
3个回答

2
我不确定你所说的“活动A必须保持打开”具体指什么,因此您需要解决这一部分或给出更详细的说明。您是指Activity B覆盖了Activity A吗?我会假设是这样的。
我建议您在Activity A中使用3个片段。 一个片段用于初始布局,另一个用于新布局。 然后再用一个片段代替Activity B,我将其称为FragmentB。
在FragmentB中创建一个回调内部接口。
public interface Callbacks {
    void onLoggedIn();
}

然后让Activity A实现这个回调。
public class ActivityA extends Activity implements FragmentB.Callbacks {

//rest of the activity...

 @Override
    public void onLoggedIn() {

getFragmentManager().beginTransaction()
                            .replace(R.id.container, new SecondFragment())
                            .commit();
}
}

显然,您可以为ActivityAFragmentBCallbacksonLoggedInSecondFragment选择任何您喜欢的名称。 其中SecondFragment是在FragmentB中登录后包含布局的片段的名称。


1

http://developer.android.com/reference/android/app/Activity.html#StartingActivities

不要重新创建您的活动,而应使用startActivityForResult并在onActivityResult上更新您的活动。

例如:

 public class MyActivity extends Activity {
     ...

     static final int PICK_CONTACT_REQUEST = 0;

     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
             // When the user center presses, let them pick a contact.
             startActivityForResult(
                 new Intent(Intent.ACTION_PICK,
                 new Uri("content://contacts")),
                 PICK_CONTACT_REQUEST);
            return true;
         }
         return false;
     }

     protected void onActivityResult(int requestCode, int resultCode,
             Intent data) {
         if (requestCode == PICK_CONTACT_REQUEST) {
             if (resultCode == RESULT_OK) {
                 // A contact was picked.  Here we will just display it
                 // to the user.
                 startActivity(new Intent(Intent.ACTION_VIEW, data));
             }
         }
     }
 }

0

你的解决方案是在活动的OnResume()方法中从共享首选项中获取值,并更新到布局中,就像oncreate()等一样。

@Override
public void onResume(){
    super.onResume();
    // put your code here... to get sharedpreferences

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接