我正在开发一个自助服务终端应用程序供人们可以步行去订购。
我有一系列活动,包含不同的片段(订单,评论,付费等)。有些人互相替换,有些人会加入。该活动具有单个片段硬编码R.id.fragmentContainer
,其余部分以编程方式添加和标记。
现在我想要的是在我的活动中有一个函数来调用片段的一个元素(看updateReceivedData()
)但是由于某种原因我无法这样做而得到{{ 1}}。
我正在添加代码,所以有人可以告诉我我做错了什么。该应用程序通常会与某些硬件通信,因此我从代码中取出了一堆这些细节,以便于阅读。
cannot resolve method adjustPriceFunc
答案 0 :(得分:2)
您正在尝试使用类adjustPriceFunc()
中的方法Fragment
,而不是它的一部分。
使用此代码,其中MyFragment
是您正确的片段(我认为它应该是PayFragment
)。
private void updateReceivedData() {
Fragment frag = getSupportFragmentManager().findFragmentByTag("PayFragment");
if (frag instanceof MyFragment) {
frag.adjustPriceFunc();
}
}
答案 1 :(得分:2)
代码中的错误很少
在orderFunc
,checkoutFunc
等处,将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");