프래그먼트 초기화면 질문드려요!!

조회수 2158회

안녕하세요, 프래그먼트를 기반으로 어플을 만들고 싶습니다.

홈화면으로 하고싶은 메인 activiity의 FrameLayout영역을 통해

메뉴의 버튼을 클릭하면 그 FrameLayout영역에 웹뷰가 띄워지게 하였습니다.

여기서 문제는

메인activiity의 FrameLayout영역에도 웹뷰를 설정하고싶은데

이럴땐 어떻게 해야하나요?

(기본으로 뜨는 FrameLayout의 초기화면을 설정하고 싶다는 말인데 이해하셨을지 모르겠습니다ㅠㅠ)

activity_main.xml

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/fragment_container">



    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="홈화면입니다."
        android:id="@+id/textView"
        android:layout_gravity="center"
        android:textStyle="bold" />



</FrameLayout>

이게 메인 activity의 코드인데요,

구글링 해보니 이 아닌 태그의 "android: name"를 통해

초기화면을 설정하는 방법이 있었는데,

제가 원래 main java에서 FrameLayout의 addView속성을 써서 코드를 짰는데


     FrameLayout fragment_container;

      ....

        final View activity2= LayoutInflater.from(this).inflate(R.layout.activity2, null);
        fragment_container.addView(activity2);

fragment로 바꾸면 그부분이 에러가 나더라구요..ㅠㅠ

어떻게 해야할지 모르겠습니다..

1 답변

  • 질문의 의도를 초기 화면으로 프래그먼트를 이용해서 웹뷰를 실행하고 싶다.로 이해했습니다. 의도를 잘 못 이해했다면 알려주세요.

    답변은 XML을 통해서 프래그먼트를 추가하는 방법에 대해서 설명합니다. 프래그먼트 생성에 대한 추가적인 방법 및 상세한 내용은 다음 문서를 읽어보세요.

    다음과 같이 메인 액티비티의 레이아웃 파일에 fragment를 추가합니다. 이 때, android:name="xxx.xxx.WebViewFragment"에는 인스턴스화 할 프래그먼트 클래스를 넣습니다.

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent">
    
        <fragment
            android:id="@+id/web"
            android:name="xxx.xxx.WebViewFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </FrameLayout>
    

    시스템은 activity_main.xml 레이아웃을 생성할 때, 레이아웃에 지정된 프래그먼트를 생성합니다. 즉, XML에서 작성한 WebViewFragment가 생성됩니다. 이렇게 생성된 프래그먼트는 FragmentManager의 findFragmentById() 함수를 통해서 접근할 수 있습니다.

    MainActivity.java

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            WebViewFragment webViewFragment = (WebViewFragment) getSupportFragmentManager().findFragmentById(R.id.web);
            webViewFragment.loadUrl("https://www.hashcode.co.kr");
        }
    
    }
    

    웹뷰 프래그먼트는 다음과 같이 간단하게 만들었습니다. 필요에 따라 더 많은 코드를 추가하세요.

    WebViewFragment.java

    public class WebViewFragment 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());
            return webView;
        }
    
        public void loadUrl(String url) {
            webView.loadUrl(url);
        }
    }
    

    위 코드의 결과는 다음과 같습니다.

    이미지

    • 답변 감사합니다!! 덕분에 초기화면 띄웠네요 ㅎㅎ 그런데 알려주신대로 코드를 짜니 원래 썼던 프래그먼트 웹뷰 안에서의 뒤로가기가 안먹는데 어떻게 써야하나요??ㅠㅠ 소은찡 2016.7.18 19:27
    • 웹뷰 내에서 뒤로가기 처리는 다음 링크를 참고해서 코드를 추가해보세요. http://gun0912.tistory.com/23 한로니로니 2016.7.19 10:48

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.