当前位置: 首页 > 知识库问答 >
问题:

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

束敏学
2023-03-14

我们采取了以下措施:

我们有一个片段,例如: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时,我们在_BACK_PRESSED=1上设置了一个标志,在InboxFragment中,如果该标志设置为1,则不进行web服务调用GetMessagesFromCloud()。

我们想知道上面是否是禁止web服务调用的正确方法,因为当片段出现时总是调用onCreateView。请告知。

据我们所知,当在iOS平台上完成相同的实现时,回击时,视图中的片段会弹出,后面的片段会出现。当您回击时,Web服务调用并不是每次都进行的,因为在didViewLoad事件中调用了Web服务。他们有2个事件-didViewLoad和didViewEmerar。因此,当他们回击时,在没有进行服务调用的地方调用了DIDViewEmerar,并且没有调用DIDViewLoad。

非常感谢。

共有1个答案

亢嘉茂
2023-03-14

将响应存储在对象中并检查其空值。

 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;
    }
 类似资料:
  • 我在弄清楚碎片是如何工作的。我有3个类,MainActivity,Fragment1和fragment2。 MainActivity扩展了 Fragment2还扩展了SherlockFragment,但什么也不做,将它膨胀为空。xml

  • 我想从片段到活动使用返回按钮使用工具栏返回图标。 碎片是我的抽屉菜单项 我该怎么做?

  • 我的中有10个选项卡。打开活动后,第一个片段就会显示出来,但下一个片段中的方法(AsyncTask)会被调用。如果我转到下一个选项卡,比如第3个选项卡,那么将调用第4个中的方法,依此类推。 我不理解这种行为。请救命!

  • 我正试着从后面取回碎片。它正在被检索,但问题是在按下后退按钮时,当前片段的oncreate视图和后续lifecyce方法也会被调用。下面是我将片段放入backbackback的代码: 以下是片段的代码:

  • 问题内容: 我很难找到有关如何使用Android调用标准SOAP / WSDL Web服务的良好信息。我所能找到的只是非常复杂的文档和对“ kSoap2”的引用,然后是一些有关使用SAX手动解析它们的内容。好的,很好,但是是2008年,所以我认为应该有一些好的库来调用标准Web服务。 Web服务基本上只是在NetBeans中创建的一种。我希望IDE支持生成管道类。我只需要最简单/最优雅的方法就可以

  • 我在Scala上使用Play 2.5,我创建了一个类,可以多次调用外部web服务。 外部Web服务在某些条件下被调用并得到ok或nok的简单响应。如果可以,那么我应该更新内部对象状态,如果可以,我现在什么也不做。 这是我的类,它将String的列表作为参数,并返回要在控制器中处理的对象的Future列表。 是列表类型的列表,但我希望它只是一个简单的响应列表。 1)如何简化和纠正我的代码以获得响应列