프레그먼트에서 다른 레이아웃 뷰 호출


activity_main.xml

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<android.support.v4.app.FragmentTabHost
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/tabhost">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TabWidget
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/tabs"></TabWidget>
        </LinearLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="49dp"
            android:id="@+id/tabcontent"/>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/realtabcontent"
            android:layout_weight="1"/>

    </LinearLayout>
</android.support.v4.app.FragmentTabHost>

여기에 선언된 툴바를 fagment에서 사용하고 싶습니다.

fragment1.java

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInistanceState) {
        // Inflate the layout for this fragment0
        View view = inflater.inflate(R.layout.fragment1, container, false);
        View v = inflater.inflate(R.layout.activity_main, container, false);

        Toolbar toolbar = (Toolbar) v.findViewById(R.id.toolbar);
        ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
        setHasOptionsMenu(true);
 ...
}

이 부분에서 엑티비티 메인에 선언된 툴바를 찾아오는 코드가 맞나요?? 이렇게 사용하니 적용이 안되네요 ..

 @Override
    public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_main, menu);

        final MenuItem item = menu.findItem(R.id.action_search);

        SearchView searchView = (SearchView) item.getActionView();
    ...
    }
  • 2016년 10월 24일에 작성됨
    대학생입니다.

조회수 116


1 답변


좋아요
1
싫어요
채택취소하기

activity_main은 액티비티가 생성될 때 인플레이트 되기 때문에 작성하신 코드처럼 프래그먼트에서 인플레이트를 하는 것은 의미가 없습니다. 다음과 같이 코드를 수정해보세요.

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment1, container, false);
    Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);    
    setHasOptionsMenu(true);

    ...
    return view;
}

setSupportActionBar(toolbar)는 액티비티에서 호출하는 것이 더 나을 것 같습니다.

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    ...
}

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close