在设备后退按钮上,再次调用上一个片段Web服务调用

时间:2016-01-20 05:12:14

标签: android web-services android-fragments

我们有以下实施:

我们有一个片段,例如: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。

谢谢。

1 个答案:

答案 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;
    }