我们有以下实施:
我们有一个片段,例如:InboxFragment,它包含所有消息的列表视图。
在InboxFrgament中,在加载时我们调用Web服务以使用Web服务调用从云中检索最新消息:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_inbox, container, false);
context = getActivity();
//Get Messages From Cloud - web service call
if (ON_BACK_PRESSED == 0) {
GetMessagesFromCloud();
}
}
当您点击消息时,我们将新的片段MessageDetailsFragment添加到堆栈。我们使用以下函数添加一个新片段:
public void AddFragmentToStack(Fragment newFragment, String tag) {
FragmentTransaction ft = this.getSupportFragmentManager()
.beginTransaction();
ft.replace(R.id.content_frame, newFragment, tag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
现在这个工作正常。但是当我们点击设备后退按钮时(当我们在MessageDetailsFragment上时),它将我们带回InboxFragment并再次调用onCreateView函数,因为向服务器发送了获取新消息的Web服务调用。
我们不希望每次回访MessageDetailsFragment时都会发生此Web服务调用。我们在InboxFragment中实现了下拉刷新功能,这是下载任何新消息的事件。因此,当加载MessageDetailsFragment时,我们已经使用了一个标志ON_BACK_PRESSED = 1,而如果此标志设置为1,则在InboxFragment中,则不要使Web服务调用GetMessagesFromCloud()。
我们想知道上面是否是禁止Web服务调用的正确方法,因为片段出现时始终会调用onCreateView。请指教。
根据我们的知识,当在iOS平台上完成相同的实现时,在回击时,弹出视图中的片段并显示后面的片段。每次回打时都不会进行Web服务调用,因为在DidViewLoad事件中调用了Web服务。他们有2个事件--DisViewLoad和DidViewAppear。因此,当他们回击时,DidViewAppear会在未进行服务调用的地方被调用,并且不会调用DidViewLoad。
谢谢。
答案 0 :(得分:0)
您将响应存储在Object中并检查其空值。
ResponseObject mResponse;//your response data type
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_inbox, container, false);
context = getActivity();
//Get Messages From Cloud - web service call
if (mResponse == null) {
GetMessagesFromCloud();
} else {
//update UI
}
}
//your response callback. I am not sure what are your callbacks so its just a hint
public void onSucess(ResponseObject response) {
mResponse = response;
}