activity 在 android 完成后如何刷新片段?
How to refresh the fragment after activity finished in android?
我正在处理用户登录程序
首先,用户输入一个片段,
在片段中,首先检查用户是否已经登录,如果是,则填充登录屏幕,否则填充登录表单。
简单的代码是这样的
if (prefs_user exist) {
v = inflater.inflate(R.layout.fragment_logined, container, false);
logout.setOnClickListener(new View.OnClickListener() {
editor.remove(prefs_user).commit();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(frag).attach(frag).commit();
});
} else {
v = inflater.inflate(R.layout.fragment_login, container, false);
login.setOnClickListener(new View.OnClickListener() {
editor.put(prefs_user, true).commit();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(frag).attach(frag).commit();
});
reg.setOnClickListener(new View.OnClickListener() {
intent to start register activity
});
}
然后,对于注册activity
if(reg_success) {
app.editor.putString("prefs_user",true).commit();
finish();
}
到目前为止,它适用于登录/注销,问题是,在新 activity 中注册后,片段没有更新,例如用户注册成功后应显示注销屏幕。
activity完成后如何刷新片段?谢谢
当您在 activity 上调用 finish()
时,您的片段将被销毁,因为您的片段的生命周期与您的 activity 的生命周期相关联。
为了解决这个问题,您可以开始注册 Activity,如下所示:
Intent intent = new Intent(getActivity(), register .class);
startActivityForResult(intent, 10001);
当你完成 activity 后,你应该像下面这样设置结果:
setResult(Activity.RESULT_OK)
现在在您的片段中,您将通过覆盖片段中的 onActivityResult() 来获得完成 activity 的事件。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == 10001) && (resultCode == Activity.RESULT_OK))
// recreate your fragment here
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(frag).attach(frag).commit();
}
就是这样。
希望对您有所帮助。
考虑所有 android 版本使用这个:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
fragmentManager.beginTransaction().detach(this).commitNow();
fragmentManager.beginTransaction().attach(this).commitNow();
} else {
fragmentManager.beginTransaction().detach(this).attach(this).commit();
}
我正在处理用户登录程序
首先,用户输入一个片段,
在片段中,首先检查用户是否已经登录,如果是,则填充登录屏幕,否则填充登录表单。
简单的代码是这样的
if (prefs_user exist) {
v = inflater.inflate(R.layout.fragment_logined, container, false);
logout.setOnClickListener(new View.OnClickListener() {
editor.remove(prefs_user).commit();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(frag).attach(frag).commit();
});
} else {
v = inflater.inflate(R.layout.fragment_login, container, false);
login.setOnClickListener(new View.OnClickListener() {
editor.put(prefs_user, true).commit();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(frag).attach(frag).commit();
});
reg.setOnClickListener(new View.OnClickListener() {
intent to start register activity
});
}
然后,对于注册activity
if(reg_success) {
app.editor.putString("prefs_user",true).commit();
finish();
}
到目前为止,它适用于登录/注销,问题是,在新 activity 中注册后,片段没有更新,例如用户注册成功后应显示注销屏幕。
activity完成后如何刷新片段?谢谢
当您在 activity 上调用 finish()
时,您的片段将被销毁,因为您的片段的生命周期与您的 activity 的生命周期相关联。
为了解决这个问题,您可以开始注册 Activity,如下所示:
Intent intent = new Intent(getActivity(), register .class);
startActivityForResult(intent, 10001);
当你完成 activity 后,你应该像下面这样设置结果:
setResult(Activity.RESULT_OK)
现在在您的片段中,您将通过覆盖片段中的 onActivityResult() 来获得完成 activity 的事件。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == 10001) && (resultCode == Activity.RESULT_OK))
// recreate your fragment here
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(frag).attach(frag).commit();
}
就是这样。
希望对您有所帮助。
考虑所有 android 版本使用这个:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
fragmentManager.beginTransaction().detach(this).commitNow();
fragmentManager.beginTransaction().attach(this).commitNow();
} else {
fragmentManager.beginTransaction().detach(this).attach(this).commit();
}