5

我看过这个问题,但没有得到好的答案,我的情况有点不同。我有 2 个活动 A 和 B。从活动 AI 启动活动 B 但活动 A 必须保持打开状态,现在在我登录活动 BI 后将一些数据保存在共享首选项中,我需要活动 A 中的布局根据共享首选项值进行更改,所以登录后必须重新创建活动 A 以应用更改,但仍应在活动 B 后面。

所以我的问题是可以从活动 B 重新创建活动 A 吗?

4

3 回答 3

2

我不知道您对“活动 A 必须保持打开”的确切含义,因此您必须弄清楚那部分或给出更详细的解释。你的意思是活动 B 覆盖活动 A 吗?我会假设的。

我建议您在 Activity A 中使用 3 个 Fragment。一个 Fragment 用于初始布局,另一个 Fragment 用于新布局。然后是另一个片段而不是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();
}
}

显然,您可以为ActivityAFragmentBCallbacks和选择任何您喜欢onLOggedIn的名称SecondFragmentSecondFragment登录后包含布局的fragment的名称在哪里FragmentB

于 2015-08-31T08:28:52.633 回答
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));
             }
         }
     }
 }
于 2015-08-31T08:25:12.033 回答
0

您的解决方案是从共享首选项中获取值并更新到 OnResume() 活动方法中的布局,例如 oncreate() 等:

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

}
于 2015-08-31T08:10:53.447 回答