2016-05-09 31 views
0

MainActivityでViewPagerに2つのフラグメントを動的に追加しますが、Fragment.getView()は常にnullを返します。この問題を解決するにはどうすればよいですか?前もって感謝します。Fragment.getView()は常にnullを返します

mLinearLayout= (LinearLayout)fragments.get(0).getView().findViewById(R.id.linear_layout); 
    mRelativeLayout= (RelativeLayout) fragments.get(1).getView().findViewById(R.id.relative_layout); 
+1

getViewメソッド(実装)フラグメントビューを返します。そのonCreateView()が完了した後でなければなりません。それ以外の場合はnullを返します。 – Bob

+0

MainActivityでこれらのサブビューを取得する必要があるのはいつですか? MainActivityで使用する必要があります。 –

答えて

4

私があなただったら、フラグメント 'onCreateView()を使用してビューをバインドし、Activityの親にonActivityCreated()のインターフェイスでビューを知らせるようにします。

あなたのインターフェースは

public interface ViewInterface { 
    void onLinearLayoutCreated(LinearLayout layout); 
    void onRelativeLayoutCreated(RelativeLayout layout); 
} 

し、各フラグメントで

public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.fragment_layout, inflater, false); 
    mLinearLayout = layout.findViewById(R.id.linear_layout); 
    ... 
    return layout; 
} 

... 

public void onActivityCreated (Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    try { 
    ViewInterface callback = (ViewInterface) getActivity(); 
    callback.onLinearLayoutCreated(mLinearLayout); 
    } catch (ClassCastException e) { 
    Log.e("ERROR", getActivity().getName()+" must implement ViewInterface"); 
    } 
    ... 
} 

ようになり、その後、あなたの親ActivityにできViewInterface

void onLinearLayoutCreated(LinearLayout layout) { 
    //do something with LinearLayout 
    ... 
} 
0

Fragmentにインターフェイスを定義します。 Activityに実装してください。 FragmentActivityインスタンスがあります。今度は、onActivityCreated()Fragmentの中でgetView()Viewを返すように、Activityインスタンスでインターフェイスメソッドを呼び出します。

関連する問題