我可以通过Bundle / Instance将字符串值传递给PageFragment。但是我如何通过视图?
我尝试在PageFragment中创建公共LinearLayout,然后在FragmentPagerAdapter中使用PageFragment.linearlayout.addView(myview);
。但它没有奏效
public class PageFragment extends Fragment {
public static LinearLayout linearlayout;
public static PageFragment newInstance(String title) {
PageFragment pageFragment = new PageFragment();
Bundle bundle = new Bundle();
bundle.putString("title", title);
pageFragment.setArguments(bundle);
return pageFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.page_quiz, container, false);
tv = (TextView) view.findViewById(R.id.questionText);
tv.setText(getArguments().getString("title"));
linearlayout= (LinearLayout) view.findViewById(R.id.questionList);
return view;
}
}
FragmentPagerAdapter:
private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
...
@Override
public Fragment getItem(int index) {
PageFragment.linearlayout.addView(myview); //=> doesnt work
String mytext = "My Text";
return PageFragment.newInstance(index + mytext);
}
答案 0 :(得分:2)
你所尝试的并不是一个正确的方法来做你想做的事。首先,在适配器的getItem()
方法中,Fragment
的视图尚未构建,因此LinearLayout
将为null。如果您需要在该级别向片段的视图添加View,那么您应该直接在onCreateView()
的{{1}}回调中添加它(仅向片段传递填充该视图所需的数据)。否则,请创建一个方法来访问父Fragment
,然后在完全构建片段后添加视图。请记住,您需要处理添加的视图以再次显示它,因为您的适配器可能会破坏碎片。
另一种方法是在片段的布局中从一开始就具有额外的视图(visibility LinearLayout
),并且只在需要时切换其可见性。
不要在类中创建视图(如GONE
)静态,因为可能会造成内存泄漏。