我有一个拥有ViewPager的Fragment。 ViewPager内的每个片段都显示一些基于主片段中的SearchBar的数据。主片段还有一个名为getKeyword()
的公共方法(返回SearchBar的字符串)。但我不知道如何获取ViewPager片段内部主要片段的引用。
我尝试使用onAttach()
方法获取引用,但它返回了mainActivity
的引用。
我也尝试使用getChildFragmentManager()
来获取主片段,但我不知道主片段的id是什么(主片段实际上是来自另一个ViewPager的片段)。
答案 0 :(得分:2)
片段之间进行通信的更好方法是使用Callback接口,
public class MainFragment extends Fragment {
//all your other stuff
private MyFragment.Callback myCallback;
public void onAttach(Activity activity) {
super.onAttach(activity);
if( activity instanceOf MyFragment.Callback ) {
myCallback = (MyFragment.Callback) activity;
} else {
/*here you manage the case when the activity does not have the interface callback implemented*/
//Generally with this
throws new ClassCastException(
activity.class.getSimpleName() +
" should implement " +
MyFragment.class.getSimpleName()
);
}
}
private void thisMethodIsUsedWhenTheSearchIsExecuted(String searchText) {
//here you get the string of the search however you need
myCallback.callWhenSearch(searchText);
}
public interface Callback {
void callWhenSearch(String searchText);
}
}
以下是管理片段
的活动的代码public class MyActivity extends AppCompatActivity implements MyFragment.Callback {
// anything you need for the main activity
public void callWhenSearch(String searchText) {
//searchText will contain the text of the search executed on MyFragment
//and here you can execute a method that calls the fragment where you need to see the result of your search for example
instanceOfSecondFragment.visualizeResultsOf(searchText)
}
}
您可以在此处获得一些官方文档:
Communicating with Other Fragments
如果您需要更多帮助,请告诉我们。