How to prevent calling onCreateView when back butt

2020-06-07 07:28发布

In my application, I have tabbar functionality. In one tab i am displaying server data in lisview, and on clicking on that detail page for that list item will be open in new fragment.

But when I press back button from that detail page, every time oncreateview called of previous page, so every time listview created and new fetches new server data. So how to prevent such and just display previous state when back button press?

3条回答
Juvenile、少年°
2楼-- · 2020-06-07 07:46

I don't think prevent calling onCreateView is a good idea, beside if the function is not called, there will be exception, so NO, you shouldn't. Instead of doing that, I suggest you move your "listview created and new fetches new server data" into another place where you can call explicitly (when you want, where you want, onCreate() is a good place), don't put it in onCreateView(). Hope this helps.

查看更多
一纸荒年 Trace。
3楼-- · 2020-06-07 07:56

I know it has been too long to give this answer but what i am guessing is you are replacing your fragment with other one. I mean to say is you are using

ft.replace(R.id.realTabContent, fragment);

to move to other fragment which is you are using in your onItemClick so simple solution is use

ft.add(R.id.realTabContent, fragment);

instead of replacing your fragment.

Understand the difference between replace and add. This will solve your problem.

Replace : it will replace the original fragment and re-create the view when you come back
Add : it will just add a new fragment to stack.

Hope this will help someone who is facing the same problem...

查看更多
霸刀☆藐视天下
4楼-- · 2020-06-07 07:56

You should cache your data objects apart from view variables as their references needs to be updated if you are fetching any data from server and don't want to make a call again then use branching to branch out that code.

Create an init() method where you do all initialization and server calls and logically branch out call to init() method whenever you don't want to call init().

查看更多
登录 后发表回答