[Android] 안드로이드 Webview 구현/Intent를 이용한 Activity에서 Fragment로 데이터전달

오늘은 Webview를 이용해 사진을 클릭 시 링크를 걸어놓은 사이트로 이동하는 것을 구현해볼 것이다.

총 4개의 버튼을 각각 다른 url로 웹뷰를 이동할 수 있도록 구현할 생각인데 한번 보도록 하자.



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());
    }
            

먼저 intent로 getExtras().getInt(“Onclick”)을 통해서 Fragment를 통한 데이터 값을 받아오고 if문을 사용해 받아온 데이터의 값에 따라서 url을 다르게 설정해준다.

이렇게 하면 하나의 WebviewActivity로 4개의 버튼을 각각 다른 url로 화면이 나오도록 구현할 수 있다.

이렇게 Webview 구현 방법과 intent를 통한 값 전달에 대해서 알아보았다.

Categories:

Updated: