My MainActivity(1)使用SectionPagerAdapter和ViewPager实现FragmentStatePagerAdapter。它工作正常,除了问题我必须调用getItemPosition来更新其中一个片段,这会导致整个事情被重新创建。总之...
其中一个"标签",调用片段(2 = BaixarOrcamentoFragment.java),而片段又调用另一个片段(3 = FillReasonToBaixaFragment.java),因此用户可以插入文本。 Fragment(2)实现了Fragment(3)用来返回"文本值"的LISTENER,因此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,为监听器加注星标,获取一些数据,显示文本输入,并通过发送" text"结束。到界面:
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),那个称为片段(3)。
MainActivity并不知道片段(2)中任何一个视图的存在,这是一个先验,它将反过来更新所有这些视图ONCE收到" text"来自Fragment(3)。
也许我没有彻底搜查,但我找不到任何类似这种情况的东西。
如何实现这一目标的任何线索?
提前谢谢你们。 最好的问候。
答案 0 :(得分:0)
下午大家。 我想出了如何实现这一目标。 第一:我从Fragment(2)中删除了OnFinishedFillReason接口,因此从Fragment(3)中删除了。 在Fragment(2)中,我像这样开始了Fragment(3),设置了一个 setTargetFragment :
FragmentManager fragmentManager = getFragmentManager();
FillReasonToBaixaFragment fillFragment = new
FillReasonToBaixaFragment();
fillFragment.setTargetFragment(BaixaOrcamentoFragment.this,
FILL_REASON_TO_BAIXA);
Bundle args = new Bundle();
args.putInt("ORCID", baixarModelList.get(masterPosition)
.getOrcGroupID());
fillFragment.setArguments(args);
fillFragment.show(fragmentManager,
this.getClass().getSimpleName());
目标片段是片段(2)本身。 然后我在片段(2)中添加了:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == FILL_REASON_TO_BAIXA && resultCode == Activity.RESULT_OK)
{// code in here }
在Fragment(3)中,我在onCreate(Bundle savedInstanceState)方法中添加了以下内容:
targetFragment = getTargetFragment();
if (targetFragment instanceof BaixaOrcamentoFragment)
{
orcID = getArguments().getInt("ORCID");
}
在返回元素的末尾,如下所示:
Intent returnData = new Intent();
Bundle bundle = new Bundle();
bundle.putString("EDITTEXT", txtEdited);
returnData.putExtras(bundle);
targetFragment.onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, returnData);
this.dismiss();
return true;
然后,在 onActivityResult 中,我收集了数据,如下所示:
Bundle returnedValues = data.getExtras();
String mRazao = returnedValues.getString("EDITTEXT").trim();
就是这样。
但我仍有问题:我有6个标签。在下面的方法中,选项卡4从未被选为currentItem:
@Override
public void onPageSelected(int position)
{
mViewPager.setCurrentItem(position);
}
关心大家!