2013-04-20 59 views
0

我能够通过捆绑/实例将字符串值传递给PageFragment。但是我怎样才能通过一个观点?传递查看到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); 
     } 

回答

2

什么你试过是不会做你想要什么的正确道路。首先,在适配器的getItem()方法中,Fragment的视图尚未构建,因此LinearLayout将为空。如果您需要在该级别添加视图到片段的视图,那么您应该直接在Fragment的回调中将其添加到onCreateView()回传中(仅将片段传递到填充该视图所需的数据)。否则,请创建一个方法来访问父代LinearLayout,并在之后添加查看完整构建这些代码段。请记住,由于碎片可能会被适配器破坏,因此您需要关注该添加的视图以再次显示它。

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

请勿在类中创建静态视图(如您的LinearLayout),因为您可能会产生内存泄漏。

+0

感谢您的回复,它确实有所帮助。我将尝试创建方法并在片段完全构建后添加视图。但是哪些类/方法片段完全构建?它尚未在'getItem'中构建;那么我可以在哪里添加'View'? – metemet06 2013-04-20 09:00:38

+0

@ metemet06您可以通过从'onCreate'或'onResume'方法发布'Runnable'来实现。但是再一次,如果您打算将视图添加到适配器的每个片段中,并且在开始时考虑在片段本身中进行。 – Luksprog 2013-04-20 09:44:32

+0

是的,我将添加视图到适配器的每个片段。对不起,也许它是一个简单的问题,但将**'Runnable'在** PageFragment的onCreate **中,如果可能的话;你可以给我一个示例如何使用:'myview.post(new Runnable(){public void run(){...}})'谢谢 – metemet06 2013-04-20 10:04:33