如何在android中完成活动后刷新片段?

use*_*235 2 android views android-intent android-fragments

我正在处理用户登录过程

首先,用户输入一个片段,

片段中,它首先检查用户是否已登录,如果为true,则膨胀登录屏幕,否则登录表单会膨胀.

简单的代码是这样的

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
    });        
}
Run Code Online (Sandbox Code Playgroud)

然后,为注册活动

if(reg_success) {
 app.editor.putString("prefs_user",true).commit();
 finish();
}
Run Code Online (Sandbox Code Playgroud)

到目前为止它适用于登录/注销,问题是,在新活动中注册后,片段不会更新,例如它应该在用户成功注册后显示注销屏幕.

活动完成后如何刷新片段?谢谢

Kis*_*oid 8

要解决它,您可以开始注册Activity,如下所示:

Intent intent = new Intent(getActivity(), register .class);
startActivityForResult(intent, 10001);
Run Code Online (Sandbox Code Playgroud)

当你完成你的活动时,你应该像下面的setResult:

setResult(Activity.RESULT_OK)
Run Code Online (Sandbox Code Playgroud)

现在,在您的片段中,您将通过覆盖片段中的onActivityResult()来获得完成活动的事件.

@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();
}
Run Code Online (Sandbox Code Playgroud)

而已.

希望它会对你有所帮助.