通过活动访问片段方法

时间:2015-12-08 10:47:56

标签: android android-fragments

我正在开发一个自助服务终端应用程序供人们可以步行去订购。

我有一系列活动,包含不同的片段(订单,评论,付费等)。有些人互相替换,有些人会加入。该活动具有单个片段硬编码R.id.fragmentContainer,其余部分以编程方式添加和标记。

现在我想要的是在我的活动中有一个函数来调用片段的一个元素(看updateReceivedData())但是由于某种原因我无法这样做而得到{{ 1}}。

我正在添加代码,所以有人可以告诉我我做错了什么。该应用程序通常会与某些硬件通信,因此我从代码中取出了一堆这些细节,以便于阅读。

cannot resolve method adjustPriceFunc

3 个答案:

答案 0 :(得分:2)

您正在尝试使用类adjustPriceFunc()中的方法Fragment,而不是它的一部分。

使用此代码,其中MyFragment是您正确的片段(我认为它应该是PayFragment)。

private void updateReceivedData() {
    Fragment frag = getSupportFragmentManager().findFragmentByTag("PayFragment");
    if (frag instanceof MyFragment) {
        frag.adjustPriceFunc();  
    }                  
}

答案 1 :(得分:2)

代码中的错误很少

  • orderFunccheckoutFunc等处,将remove添加到交易中,并在循环后调用commit一次,例如

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    for(int i = 0; i < getActiveFragments().size(); i++) {
        transaction.remove(getActiveFragments().get(i));
    }
    transaction.commit();
    
  • updateReceivedData导致编译错误,因为Fragment没有adjustPriceFunc()方法。您需要(更清洁的方法)使用adjustPriceFunc()方法创建界面,让您的片段实现它,然后您的updateReceivedData将如下所示:

    private void updateReceivedData() {
        InterfaceWithAdjustPriceMethod frag = (InterfaceWithAdjustPriceMethod) getSupportFragmentManager().findFragmentByTag("PayFragment");
        frag.adjustPriceFunc();
    }
    

答案 2 :(得分:0)

存储对片段的引用是一种不好的做法,即使它是WeakReference。
更好地使用这种方式:

   Fragment fragment = getSupportFragmentManager().findFragmentByTag("tag");