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


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

홈화면으로 하고싶은 메인 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로 바꾸면 그부분이 에러가 나더라구요..ㅠㅠ

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

  • 2016년 07월 14일에 작성됨

조회수 189


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사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close