【发布时间】:2017-08-08 14:13:11
【问题描述】:
我的 MainActivity(1) 使用 SectionPagerAdapter 和 ViewPager 实现 FragmentStatePagerAdapter。它工作正常,除了我必须调用 getItemPosition 来更新其中一个 Fragments 的问题,这会导致整个事情被重新创建。总之……
其中一个“选项卡”调用 Fragment(2=BaixarOrcamentoFragment.java),而后者又调用另一个 Fragment(3=FillReasonToBaixaFragment.java),因此用户可以插入文本。 Fragment(2) 实现了 Fragment(3) 用来返回“文本值”的监听器,因此 Fragment(2) 可以继续并完成它的任务。 这是 Fragment(2) 中调用 Fragment(3) 的代码:
FragmentManager fragmentManager = getFragmentManager();
FillReasonToBaixaFragment fillFragment = new
FillReasonToBaixaFragment();
Bundle args = new Bundle();
args.putInt("ORCID", baixarModelList.get(masterPosition)
.getOrcGroupID());
fillFragment.setArguments(args);
fillFragment.show(fragmentManager, FILL_REASON_TO_BAIXA);
然后,Fragment(3) 获取包 ORCID,为侦听器加注星标,获取一些数据,显示文本输入,并通过将这个“文本”发送到接口完成:
BaixaItemdoOrcamentoListener listener = (BaixaItemdoOrcamentoListener) this
.getContext();
..然后使用此接口(侦听器)返回已收集的内容(文本):
public interface BaixaItemdoOrcamentoListener
{
void OnFinishedFillReason(String mEditext);
}
但是,它并没有返回到 Fragment(2),它调用了 Fragment(3),在那里我实现了接收这个返回值的方法:
@Override
public void OnFinishedFillReason(String mEditext)
{}
它显示一个转换错误,说 .MainActivity 不能转换为 .FillReasonToBaixaFragment$BaixaItemdoOrcamentoListener
我继续并在 MainActivity 中声明了 OnFinishedFillReason,它实现了 FillReasonToBaixaFragment.BaixaItemdoOrcamentoListener。
现在请注意,任务的实际实现在 Fragment(2) 中。
猜猜看:当我在 Fragment(3) 中输入文本并按下 (android:imeOptions="actionDone") 时,它会返回 MainActivity,而不是 Fragment(2),即调用 Fragment(3) 的那个)。
MainActivity 不知道 Fragment(2) 内的任何视图的存在,这是先验的,一旦收到来自 Fragment(3) 的“文本”,它将依次更新所有这些视图。
也许我没有彻底搜索,但我找不到任何类似这种情况的东西。
我怎样才能做到这一点?
【问题讨论】:
标签: android-fragments android-viewpager fragmentpageradapter