我想在父母和孩子之间进行沟通fragment
。我已经在SO上阅读了这么多帖子,但这些帖子似乎对我都没用。
我有3 Fragments
FragmentA
,FragmentB
和FragmentC
。
FragmentA
是fragment
的父FragmentB
,而FragmentB
是Fragment
的父FragmentC
。
FragmentA
有EditText
TextWatcher
和viewpager
已实施标签。 FragmentB
还有另一个Viewpager
带Tabs。(所以基本上我使用的是嵌套选项卡,不建议这样做,但我确实需要使用这个场景)。
FragmentC
有recyclerView
,然后根据所选标签显示产品列表。这对我来说很好。
现在,我想为FragmentC
中的产品添加搜索功能(在webservice
中执行搜索,从FragmentC
调用产品列表的网络服务)。
实现这一目标到目前为止,我所做的是, FragmentA将基于Web响应设置viewpager,这里是一个在FragmentA中设置viewpager的方法。(Code指的是我如何获得Fragment的实例)
private void setupViewPager(ViewPager viewPager, RetailCategoryListArr retailCategoryListArr) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
for (int i = 0; i < retailCategoryListArr.getData().size(); i++) {
RetailerCategoryArr retailerCategoryArr = retailCategoryListArr.getData().get(i);
FragmentB FragB= FragmentB.newInstance(retailerCategoryArr, retailerArr.getUrlIdentifier());
adapter.addFragment(FragB, retailerCategoryArr.getName());
}
viewPager.setAdapter(adapter);
tabs.setupWithViewPager(viewPager);
}
FragmentB
还有另一个ViewPager
,然后按此实现。
private void setUpViewPager(ViewPager viewpager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
for (int i = 0; i < retailerCategoryArr.getChild().size(); i++) {
RetailerCategoryArr.RetailerSubCategoryArr retailerSubCategoryArr = retailerCategoryArr.getChild().get(i);
FragmentC FragC = FragmentC.newInstance(retailerSubCategoryArr.getId(), retailer);
adapter.addFragment(FragC, retailerSubCategoryArr.getName());
}
viewpager.setAdapter(adapter);
tabs.setupWithViewPager(viewpager);
}
所以,问题是如何在textchange
中倾听Edittext
FragmentA
FragmentC
的{{1}}?
如果接口可以做到这一点那么?
答案 0 :(得分:0)
从FragmentC
尝试执行此操作:
Fragment frag = getParentFragment(); //it will be FragmentB
FragmentA fragA = (FragmentA)frag.getParentFragment();
fragA.editText.addTextChangedListener(new TextWatcher() {
...
});
答案 1 :(得分:0)
您可以在Parent Activity中创建接口和实现,以从片段A中侦听textwatcher。
interface Test{
void setTextChange(String ch);
}
在Parent Activity中,您实现了侦听器
public class FragmenA extends Fragment{
Test mCallback;
public Edittext;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (Test) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement Test");
}
}
}
public class MainActivity extends Activity
implements FragmentA.Test{
Fragment fragmentc=getFragmentManager().findFragmentByTag(FragmentC.class);
public setTextChange(String ch) {
if(fragmentc!=null){
fragmentc.onChangeText(ch);
}
}
}
public class FragmenC extends Fragment{
Test mCallback;
public void onChangeText(String text){
}
}