我使用“getSupportFragmentManager()检查了所有类似的票证.findFragmentById返回null”但没有帮助。
在Android Studio 3.0.1中,我刚刚创建了一个基于“选项卡式活动”模板项目和导航样式设置为“操作栏选项卡(使用ViewPager)”的新项目。
然后我添加了3个xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment1">
<!-- @+id/fragment2 in fragment2.xml-->
<!-- @+id/fragment3 in fragment3.xml-->
...some controls
</LinearLayout>
以及3个相应的.java类文件
public class Fragment1 extends Fragment {
//Fragment2, Fragment3
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment1, container, false);
//R.layout.fragment2, R.layout.fragment3
}
}
在MainActivity类的SectionsPagerAdapter类中,我将overriden方法getItem更改为以下内容。
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
switch(position) {
case 0: return new Fragment1();
case 1: return new Fragment2();
case 2: return new Fragment3();
default:
return new Fragment1();
}
//return PlaceholderFragment.newInstance(position + 1);
}
最后,我想在我的第一个片段中触发一些东西。
public void onClick(View view) {
Fragment1 frag1 = (Fragment1) getSupportFragmentManager().findFragmentById(R.id.fragment1);
}
我的问题是当我点击工具栏中的一个按钮并且我到达它的onClick事件(在MainActivity中)时,我的frag1总是为空!
请帮忙! :)
答案 0 :(得分:0)
你不应该像这样覆盖 getItem
我建议如下:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public SectionsPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
public void setFragments(List<Fragment> fragments) {
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
如果你想得到你想要的任何片段,只需打电话
((FragmentCallBack)sectionsPagerAdapter.get(thePositionOfYourFragment))
.trigger();