본문 바로가기
개발/Android

안드로이드 Webview 사용법 및 Intent를 이용한 Activity에서 Fragment로 데이터전달

by 남트로 2023. 4. 23.

오늘은 안드로이드 앱에서 Webview를 구현하는 방법과 Intent를 이용해서 Acitvity에서 Fragment로 데이터를 전달하는 방법에 대해서 알아볼 것이다.

 

Webview부터 차근차근 알아보자

 

Webview 구현


기본적으로 Webview를 구현하기 위해 쓰일 Activity를 만들어주었다.

WebviewActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview1);
        
        String url = "웹뷰를 구현할 링크";
webview.loadUrl(url);
webview.setWebChromeClient(new WebChromeClient());
        webview.setWebViewClient(new WebViewClientClass());
    }

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
            webview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    private class WebViewClientClass extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

먼저 위와 같이 웹뷰를 구현하는데 관련된 코드를 작성해주었다.

그리고 onKeyDown이나 WebviewClientClass 같은 함수를 통해 웹뷰가 꺼질 때 어플이 종료되지 않고 정상적으로 이전 화면으로 돌아갈 수 있도록하고 에러 없이 정상적으로 웹뷰가 로딩할 수 있도록 해주었다.



activity_webview.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".WebviewActivity">
    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</android.support.constraint.ConstraintLayout>

그리고 레이아웃에 Webview를 적용해주었다.

이렇게 되면 웹뷰는 버튼을 클릭했을시 intent를 통해 Webview로 화면 전환 할 수 있도록만 설정해주면 정상적으로 실행이 된다.



그런데 여기서 한가지 생각이 들었다.

총 4개의 버튼을 각각 다른 url을 통해서 각자 다른 화면으로 구현을 해야 하는데 그렇다면 4개의 WebviewActivity를 만들어야 할까?

4개의 버튼을 한개의 Webview에 load되기전에 url 링크만 바꿔서 한개의 WebviewActivity로만 구현할 수는 없을까?



물론 있었다.

intent를 통해서 버튼이 눌렸을때마다 어느 버튼이 눌리는지 데이터를 주고 그 데이터에 따라 url 값만 바꿔주는 형식인 것이다.

한번 코드를 통해서 보도록 하자.



Fragment에서 Activity로 값 전달하기


먼저 4개의 버튼을 정의해주고 4개의 버튼마다 Onclick을 구현해준다.

intent를 통해서 WebviewActivity로 화면전환을 할 수 있도록 해주고 intent.putExtra("onclick",숫자); 코드만 추가해준다.

MainFragment.java

gooddata1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getContext(), WebviewActivity.class);
                intent.putExtra("onclick",1);
                startActivity(intent);

            }
        });
        gooddata2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getContext(), WebviewActivity.class);
                intent.putExtra("onclick",2);
                startActivity(intent);
            }
        });

        gooddata3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getContext(), WebviewActivity.class);
                intent.putExtra("onclick",3);
                startActivity(intent);

            }
        });

        gooddata4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getContext(), WebviewActivity.class);
                intent.putExtra("onclick",4);
                startActivity(intent);
            }
        });

위와 같이 누른 버튼에 따라서 intent로 보내는 값을 다르게 해주어 어떤 버튼이 눌렸는지 인식할 수 있도록 해주는 것이다.

그렇다면 데이터를 받는 WebviewActivity 코드를 보자.



WebviewActivity.java

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);
        
        Intent intent = getIntent();
        int id = intent.getExtras().getInt("onclick");
        
        
        if ( id == 1 ) {
            String url = "첫번째 버튼 주소";
            webview.loadUrl(url);
        }
        if ( id == 2) {
            String url = "두번째 버튼 주소";
            webview.loadUrl(url);
        }
        if ( id == 3) {
            String url = "세번째 버튼 주소";
            webview.loadUrl(url);
        }
        if ( id == 4) {
            String url = "네번째 버튼 주소";
            webview.loadUrl(url);
        }
        webview.setWebChromeClient(new WebChromeClient());
        webview.setWebViewClient(new WebViewClientClass());
    }

 

이렇게 위 기능들에 대해서 알아보았다.

 

필요한 기능에 따라서 유용하게 사용하면 될 것 같다.

댓글