This question already has answers here :
Closed 2 years ago .
두 개의 Activity가 있습니다. 하나는 MainActivity이고 다른 하나는 SecondActivity입니다. SecondActivity에는 assets 폴더에서 로컬 HTML 페이지를 로드하는 Webview가 포함되어 있습니다.
MainActivity에는 button A 및 button B로 표시된 button이 포함되어 있습니다. MainActivity에서 Button A와 Button B를 눌렀을 때 A.html 및 B.html을로드하는 SecondActivity로 문자열을 URL로 전달하고 싶습니다.
지금은 MainActivity class에 다음 코드가 있습니다.
Fragment firstFragment1 = new browser();
Bundle args1 = new Bundle();
args1.putString("url1", "file:///android_asset/diploma.html");
firstFragment1.setArguments(args1);
moveToFragment(firstFragment1);
break;
SecondActivity class에는 다음 코드가 있습니다.
String url1 = getArguments().getString("url1");
myWebView=(WebView)rootView.findViewById(R.id.webview);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
myWebView.getSettings().setLoadsImagesAutomatically(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.setInitialScale(1);
myWebView.getSettings().setLoadWithOverviewMode(true);
myWebView.getSettings().setUseWideViewPort(true);
WebSettings webSettings = myWebView.getSettings();
myWebView.loadUrl(url1);
return rootView;
}
Fragment에는 완벽하게 작동하지만 Activity에서 Activity로 전달하기 위해 어떻게 작동합니까 ??
첫 번째 Activity에서 다음과 같이 인 텐트에 추가 인수를 넣어야합니다.
// I assume Web.class is your second activity
Intent intent = new Intent(this, Web.class);
intent.putExtra("url", your_url);
startActivity(intent);
그런 다음 두 번째 Activity에서 다음과 같은 인수를 검색합니다.
String url = getIntent().getExtras().getString("url");
webView.load(url);
Activity를 사용하는 경우 URL을 문자열로 전달하고 다음 Activity에서 가져옵니다.
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("url","somepage.com");
startActivity(intent);
webView에서 다음과 같이 가져옵니다.
String url = getIntent().getStringExtras("url");
webView.load("url");
웹 URL을 로드하는 하나의 공통 Activity 만들기
예 :
public class WebviewActivity extends AppCompatActivity {
Activity mActivity;
WebView webview_;
String title ="";
String url ="";
ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.help_webview_activity);
mActivity = this;
findviews();
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
title = bundle.getString("title");
url = bundle.getString("Url");
setAction();
}
else {
webview_.setVisibility(View.GONE);
}
}
private void setAction() {
try {
//check internet connection first
if (CommonUtils.isConnectingToInternet(WebviewActivity.this)) {
webview_.setVisibility(View.VISIBLE);
WebSettings webSettings = webview_.getSettings();
webview_.setWebViewClient(new MyWebViewClient());
webSettings.setJavaScriptEnabled(true);
webview_.getSettings().setSupportZoom(true);
webview_.getSettings().setBuiltInZoomControls(true);
webview_.getSettings().setDisplayZoomControls(true);
webview_.loadUrl(url);
}
else {
//alert - no internet connection
}
} catch (Exception e) {
//print exp
e.printStackTrace();
}
}
private void findviews() {
webview_ = (WebView) findViewById(R.id.wbview);
}
public class MyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
if(dialog == null){
dialog = ProgressDialog.show(WebviewActivity.this, null, "Loading...");
dialog.setCancelable(true);
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if(dialog.isShowing())
dialog.dismiss();
}
}
}
Xml 코드 :
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:id="@+id/activity_login_screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutDirection="ltr"
tools:context=".activity.WebviewActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:supportsRtl="false"
app:popupTheme="@style/AppTheme.PopupOverlay">
<include layout="@layout/header_settinglayout" />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/wbview"
>
</WebView>
</RelativeLayout>
이제 전체 앱에서 모든 URL 또는 HTML을 로드 할 수 있습니다.
Activity 에서 :
if (CommonUtils.isConnectingToInternet(HelpActivity.this)) {
Intent i = new Intent(HelpActivity.this,WebviewActivity.class);
i.putExtra("title",getResources().getString(R.string.faqs));
i.putExtra("Url", "https://stackoverflow.com/questions/48594734/how-to-pass-string-url-from-main-activity-to-next-activity-and-load-url-in-webvi");
startActivity(i);
}
else {
//alert - no internet
}
Fragment에서 :
if (CommonUtils.isConnectingToInternet(getActivity())) {
Intent i = new Intent(getActivity(),WebviewActivity.class);
i.putExtra("title",getResources().getString(R.string.faqs));
i.putExtra("Url", "https://stackoverflow.com/questions/48594734/how-to-pass-string-url-from-main-activity-to-next-activity-and-load-url-in-webvi");
getActivity().startActivity(i);
}
else {
//alert - no internet
}
Webview 로드 URL
i.putExtra("Url", "https://stackoverflow.com/questions/48594734/how-to-pass-string-url-from-main-activity-to-next-activity-and-load-url-in-webvi");
assets 디렉토리에서 Webview로드 html
i.putExtra("Url", "file:///android_asset/diploma.html");