0

我可以通过 Bundle/Instance 将字符串值传递给 PageFragment。但是我怎样才能通过视图?

我尝试在 PageFragment 中创建一个公共 LinearLayout,然后PageFragment.linearlayout.addView(myview);在 FragmentPagerAdapter 中使用。但它没有用

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;  
     }
}

片段页面适配器:

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);
        }  
4

1 回答 1

2

你所尝试的并不是做你想做的事情的正确方法。首先,在getItem()适配器的方法中,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Fragment)视图的视图尚未构建视图,因此LinearLayout将为空。如果您需要在该级别将视图添加到片段的视图,那么您应该直接在onCreateView()回调中添加它Fragment(仅将填充该视图所需的数据传递给片段)。否则,创建一个方法来访问父级并在完全构建片段LinearLayout添加视图。请记住,您需要处理添加的视图以再次显示它,因为片段可能会被您的适配器破坏。

另一种方法是从一开始就在片段布局中拥有额外的视图(可见性GONE),并且仅在需要时切换其可见性。

不要LinearLayout在类中使视图(如您的)静态,因为您可能会造成内存泄漏。

于 2013-04-20T07:08:37.113 回答