프래그먼트 겹침 문제

조회수 5899회

안드로이드 질문 드립니다.

익스펜더블 리스트뷰를 썼고,

각 메뉴를 누르면 일반 프래그먼트와 프래그먼트 웹뷰 등도 띄우도록 하였습니다.

일반 프래그먼트를 띄운 다음에 프래그먼트 웹뷰를 띄우면 웹뷰가 일반 프래그먼트 뒤에 가려진 상태로 띄워집니다.

실행이 잘 되긴하는데 프래그먼트가 겹쳐져서 아래에 있는 웹뷰가 보이지 않는 문제를 해결하고 싶습니다.

MainActivity.java

public class MainActivity extends AppCompatActivity {


// 메인화면을 프래그먼트 웹뷰로 띄운 모습입니다
    static public class MyWebViewFragment extends Fragment {
        private WebView webView;



        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            webView = new WebView(getActivity());
            webView.getSettings().setJavaScriptEnabled(true);
            webView.setWebChromeClient(new WebChromeClient());
            webView.setWebViewClient(new WebViewClient());
            webView.loadUrl("http:///...~");


            return webView;


        }
    }



...



// 첫번째 메뉴 ,, 일반 프래그먼트
 menu01Activity fragment = new menu01Activity();
                                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                                fragmentTransaction.replace(R.id.myweb_fragment, fragment);
                                fragmentTransaction.commit();





//두번째 메뉴 ,,  프래그먼트 웹뷰
 MyWebViewFragment fragment2 = (MyWebViewFragment)getFragmentManager().findFragmentById(R.id.myweb_fragment);
                                WebView webView = fragment2.webView;

                                webView.getSettings().setJavaScriptEnabled(true);
                                webView.loadUrl("http://m.daum.net");





프래그먼트 위에 프래그먼트를 띄우는거면 add 대신 replace 를 쓰면 된다고 알고 있는데, 이 경우는 프래그먼트 위에 프래그먼트 웹뷰를 띄우는 것이라 어떻게 해야할지.. 잘모르겠네요

1 답변

  • 겹치는 것이 문제라면(=웹뷰가 보여야하는데 다른 프래그먼트에 의해 가려지는 현상) replace(), remove() 함수를 사용해서 해결할 수 있습니다.

    올려주신 코드에서 첫번째 메뉴를 클릭하면 replace() 함수를 호출하는데 두번째 메뉴를 클릭하면 http://m.daum.net으로 웹페이지 이동에 대한 처리만 하고 있습니다. 따라서 현재 코드로는 웹뷰가 보이지 않는 것이 맞고요.

    메뉴를 클릭했을 때 특정 프래그먼트가 보이게 하고 싶다면 이 부분에서 프래그먼트를 추가, 삭제, 교체하는 작업이 필요합니다. 각각에 해당되는 API가 add(), remove(), replace() 입니다. 첫번째 메뉴를 클릭했을 때처럼 replace() 함수를 호출해보세요.

    혹은 윗쪽을 덮고있는 (첫번째 메뉴의)프래그먼트를 remove() 하는 것도 방법입니다. 구현 중인 UI에 적합한 방법을 사용하시기 바랍니다.

    관련된 내용으로 아래 링크에서 프래그먼트 트랜잭션 수행이라는 부분을 참조하세요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)