从另一个 activity 重新创建/重启 activity
recreate /restart activity from another activity
我看过这个 Question 但没有得到很好的答案,我的情况有点不同。我有 2 个活动 A 和 B。从 Activity A 我启动 Activity B 但 activity A 必须保持打开状态,现在在我登录后 Activity B 我在共享首选项中保存一些数据我需要 Activity A 中的布局根据共享首选项值进行更改,因此登录后 Activity A 必须重新创建以应用更改,但仍应落后于 Activity B。
所以我的问题是可以从 Activity B 重新创建 Activity A 吗?
您的解决方案是从共享首选项中获取值并更新到 activity 的 OnResume() 方法中的布局,例如 oncreate() 等:
@Override
public void onResume(){
super.onResume();
// put your code here... to get sharedpreferences
}
http://developer.android.com/reference/android/app/Activity.html#StartingActivities
您应该使用 startActivityForResult
并在 onActivityResult
上更新您的 activity,而不是**重新创建*您的 activity
例如
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));
}
}
}
}
虽然我不知道 "activity A must stay opened" 到底是什么意思,所以您必须弄清楚那部分或给出更详细的解释。你是说 Activity B 覆盖 Activity A 吗?我会假设。
我建议你在ActivityA中使用3个片段。
一个片段用于初始布局,另一个片段用于新布局。
然后另一个片段而不是 Activity B,我将其称为 FragmentB.
在FragmentB
中创建一个Callback内部接口。
public interface Callbacks {
void onLoggedIn();
}
然后ActivityA实现这个回调
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();
}
}
显然,您可以为 ActivityA
、FragmentB
、Callbacks
、onLOggedIn
和 SecondFragment
选择您喜欢的任何名称。
其中 SecondFragment
是在 FragmentB
.
中登录后包含布局的片段的名称
我看过这个 Question 但没有得到很好的答案,我的情况有点不同。我有 2 个活动 A 和 B。从 Activity A 我启动 Activity B 但 activity A 必须保持打开状态,现在在我登录后 Activity B 我在共享首选项中保存一些数据我需要 Activity A 中的布局根据共享首选项值进行更改,因此登录后 Activity A 必须重新创建以应用更改,但仍应落后于 Activity B。
所以我的问题是可以从 Activity B 重新创建 Activity A 吗?
您的解决方案是从共享首选项中获取值并更新到 activity 的 OnResume() 方法中的布局,例如 oncreate() 等:
@Override
public void onResume(){
super.onResume();
// put your code here... to get sharedpreferences
}
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));
}
}
}
}
虽然我不知道 "activity A must stay opened" 到底是什么意思,所以您必须弄清楚那部分或给出更详细的解释。你是说 Activity B 覆盖 Activity A 吗?我会假设。
我建议你在ActivityA中使用3个片段。 一个片段用于初始布局,另一个片段用于新布局。 然后另一个片段而不是 Activity B,我将其称为 FragmentB.
在FragmentB
中创建一个Callback内部接口。
public interface Callbacks {
void onLoggedIn();
}
然后ActivityA实现这个回调
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();
}
}
显然,您可以为 ActivityA
、FragmentB
、Callbacks
、onLOggedIn
和 SecondFragment
选择您喜欢的任何名称。
其中 SecondFragment
是在 FragmentB
.