Fragment中里能手动调用onCreateView()方法吗?

调用的时候参数怎么写呢?

其实就是一个登录的逻辑,在fragment里的onCreateView()中先判断是否登录,未登录就加载一个布局A,然后点击按钮跳转到LoginActivity登录成功之后,finish()掉LoginActivity,回到了fragment里想重新进行判断然后加载登录成功之后的布局B。但是发现回来fragment里时从onStart()方法开始调用了,没执行onCreateView();所以就希望能手动调用onCreateView()。

阅读 7.7k
2 个回答

按我多年工作经验,没有过手动调用这种做法,这种做法即便有也不合理。这个方法跟onCreate方法一样在创建时被调用。如果你是想实现某个功能只有登录后才可操作:
方法一:你可以这样设计一个静态方法在LoginActivity中如public static boolean isLogin;然后登录成功后在LoginActivity中设置isLogin=true;返回到你的Fragment中。在你的Fragment事件中调用LoginActivity.isLogin判断用户是否登录,然后跳转或展现你想要的数据。如下代码:(希望对你有用)

            if (LoginActivity.isLogin) {
                /*startActivity(new Intent(ProfileActivity.this,
                        OrderActivity.class));*/
                startActivity(new Intent(ProfileActivity.this,OrderActivity2.class));
            } else {
                startActivity(new Intent(ProfileActivity.this,
                        LoginActivity.class));
            }

方法二:

1.Fragment所依赖的activity中:

startActivityForResult(intent, requestCode)或startActivity跳转到LoginActivity

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
}

通过该方法回传是否登录成功。然后在Fragment所依赖的activity中调用Fragment的布局方法,当然前提是先设置Fragment的布局操作方法。

相信上面的回答基本够用了,
我再补充几句.
1) 为什么要用 Fragment? 而不是 Activity 作为启动 UI
2) 事件的通信也可以使用 EventBus 及 LocalBroadCast 等.
3) onCreateView 你当然可以手动调用啊. 但是你调用了没有什么用啊. 这个方法只是创建了 View.然后你要通过这个创建的 View 手动将它添加到 UI 树上去吗?
4) 代码逻辑的问题尽量从代码逻辑及各组件通信上去思考解决. 而不是想调用 onCreateView 这种 hack.

5) 如果是在 Activity 的话,你倒是可以根据登录成功之后再调用 setContentView 来设置不同的 UI.
(但是这样也需要处理自动登录期间的 UI 界面)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题