■ 메인 액티비티에서 호출방법 : targetSdkVersion 26 일 때

Fragment fragment = new WebViewFragment();

//Fragment 호출시 파라미터 값을 전달 하고 싶을 경우 Bundle 클래스 사용
Bundle args = new Bundle();
args.putString(“URL”, playground.naragara.com“);
fragment.setArguments(args);

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
   .setCustomAnimations(R.anim.anim_slide_in_from_left,R.anim.anim_slide_out_from_left)
   .replace(R.id.content_main, fragment)
   .addToBackStack(null)
   .commit();

————————————————————–

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class WebViewFragment extends Fragment {
private static final String ARG_PARAM1 = “URL”;
protected ProgressDialog progressDialog;
private WebView mainView;
private String TargetURL = “”;
private String currentURL;

public WebViewFragment() {
// Required empty public constructor
}
 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
   // Inflate the layout for this fragment
   View rootView = inflater.inflate(R.layout.fragment_web_view, container, false);
   mainView = (WebView) rootView.findViewById(R.id.mainWebView);

   progressDialog = new ProgressDialog(getActivity());

   currentURL = null;

   if (getArguments() != null) TargetURL = getArguments().getString(ARG_PARAM1);
   
   WebViewInit();

   return rootView;
}

private void WebViewInit(){

//01. 스크롤 제거
//- 최초에 웹뷰를 가로 100%, 세로 100%로 생성하게 되면 스크롤이 보이게 됩니다.
// 스크롤로 인해 웹에서 100%로 작업이 되었음에도 app을 실행하면 우측에 스크롤 넓이 만큼의 공백이 생기게 됩니다. //이를 방지하려면 스크롤을 제거해줘야 합니다.
mainView.setHorizontalScrollBarEnabled(false); // 세로 scroll 제거
mainView.setVerticalScrollBarEnabled(false); // 가로 scroll 제거

//브라우저 세팅
WebSettings webSettings = mainView.getSettings();
webSettings.setJavaScriptEnabled(true); //자바스크립트 default 가 false 임
webSettings.setSupportMultipleWindows(true);// 새창띄우기 허용여부
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);// 자바스크립트 새창뛰우기 (멀티뷰) 허용여부
webSettings.setLoadWithOverviewMode(true); //메타태크 허용여부
webSettings.setUseWideViewPort(true);//화면 사이즈 맞추기 허용여부
webSettings.setSupportZoom(true);//화면 줌 허용여부
webSettings.setBuiltInZoomControls(true); //화면 확대 축소 허용여부
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //컨텐츠 사이즈 맞추기
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //브라우저 캐시 허용여부
webSettings.setDomStorageEnabled(true); //로컬저장소 허용여부

//웹사이트와 데이터 주고 받기위해서 사용
//webview.addJavascriptInterface(new CheckupBridge(this, handler), “HybridApp”); 

mainView.setWebChromeClient(new WebChromeClient() {
});
//Webview 안의 하이퍼링크 클리시 별도의 브라우저 띄우지 않고 기존 Webview에서 띄움
//Webview 안의 하이퍼링크 클릭시 shouldOverrideUrlLoading 콜백이 불 림

//shouldOverrideUrlLoading : 새창이 뜨지 않게 하기 위해서 많이 사용되는 함수.
// 이 부분에 내용을 넣어 주면 새로운 창이 열리지 않고 기존 창에서 로딩됨
mainView.setWebViewClient(new WebViewClient() {
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
    progressDialog.show();
  }

  public void onPageFinished (WebView view, String url) {
    progressDialog.dismiss();
  }
});

//fragment back키 적용
mainView.setOnKeyListener(new View.OnKeyListener() {
  @Override
  public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
     if(keyEvent.getAction() != KeyEvent.ACTION_DOWN)
     return true;

     if(keyCode == KeyEvent.KEYCODE_BACK){
       if(mainView.canGoBack()){
         mainView.goBack();
        } else { //if (!getFragmentManager().popBackStackImmediate()) {
          getActivity().onBackPressed();
          //super.onBackPressed();
        }
     return true;
    }
  return false;
  }
});

mainView.loadUrl(TargetURL);

}
}

——————————————————————–
[fragment_web_view.xml]
<FrameLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
tools:context=“ddolcat.test.WebViewFragment”>

<WebView
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:id=“@+id/mainWebView” />

</FrameLayout>

■ 메인 액티비티에서 호출방법 : targetSdkVersion 28 일 때
API 레벨 28에서 부터는 FragmentManager  클래스를 사용할 수 없다.(This class was deprecated in API level 28.)

FragmentActivity.getSupportFragmentManager()를 사용합니다.

프레그먼트를 사용해야할 경우 아래와 같이 AppCompatActivity 혹은 Activity 사용할 수 없다.
public class
MainActivity extends AppCompatActivity {
}
public class MainActivity extends Activity {}

해결법은 FragmentActivity를 상속 받아서 처리하면 된다.
public class
MainActivity extends FragmentActivity {
……………………………….생략

프래그먼트 간 데이터 공유

■ 프레그먼트에서 getSystemService(), getApplicationContext()오브젝트 호출 방법
Vibrator vibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
btn1.setAnimation(AnimationUtils.loadAnimation(getActivity().getApplicationContext(), R.anim.bounce_xml));

 

Leave a Reply

error: Content is protected !!