0

バンドル/インスタンスを介して文字列値を PageFragment に渡すことができます。しかし、どうすればビューを渡すことができますか?

私は PageFragment で public 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;  
     }
}

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

1 に答える 1

2

あなたが試したことは、あなたが望むことをするための正しい方法ではありません。まずgetItem()、アダプタのメソッドではFragmentのビューがまだ構築されていないため、LinearLayoutは null になります。そのレベルでフラグメントのビューにビューを追加する必要がある場合は、ビューのonCreateView()コールバックに直接追加する必要がありますFragment(そのビューに入力するために必要なデータのみをフラグメントに渡します)。それ以外の場合は、親にアクセスするメソッドを作成し、フラグメントが完全に構築されたLinearLayoutにビューを追加します。フラグメントがアダプターによって破棄される可能性があるため、追加されたビューを再び表示するには、そのビューを処理する必要があることに注意してください。

別のアプローチは、フラグメントのレイアウトに start(visibility GONE) から追加のビューを配置し、必要な場合にのみその可視性を切り替えることです。

LinearLayoutメモリ リークが発生する可能性があるため、ビュー (のような) をクラスで静的にしないでください。

于 2013-04-20T07:08:37.113 に答える