Witam. Piszę aplikację, w której wykorzystuję WebView do otwierania kilku stron www, ale do końca nie wiemczym się różni Activity od Fragment, większość przykładów na stackoverflow i ogólnie w necie jest pokazana na Activity, ale z tego co zauważyłem to naszeaplikacje w telefonach korzystają w większości przykładów z Fragmentów? I czy mogę użyć, albo czego powinienem użyć do wyświetlania stron, chodzi mi o WebView, normalnie wykorzystywałem, do tegoActivity, ale jedną ze stron odpalam (to WebView) we Fragmencie i też działa, tylko mam czasami problem z TITLE który sam sobie ustawiam na pasku AppBar (Toolbar) i wywala mnie z apki przez to. Tak więc do WebView co jest bardziej wskazane Activity czy Fragmenty? Zauważyłem też, że np w activity jak odpalę jakąś stronęi zacznę coś na tej stronie robić, przejdę do jakiejś innej podstrony, to po naciśnięciu button back czyli wywołanie metody
public void onBackPressed()
cofa mnie tak jak powinno, czyli do poprzedniej podstrony, lub strony głównej, w Fragmencie tak niestety nie mam, cofa mnie do ostatniego widoku w aplikacji, dlatego też pytam kiedy i do czego jest bardziej wskazane Activity a do czego Fragmenty, jak prawidłowo z tego korzystać itd???
Dodam kod Fragmentu z WebView może się przyda 😃
public class AdBlastFragment extends Fragment {
SharedPreferences sharedPreferences;
ProgressDialog pd = null;
ProgressBar progressBar = null;
private SwipeRefreshLayout swipe;
private WebView webView;
// private NestedWebView webView;
public static final String MyPREFERENCES = "AdBlast";
private String login;
private String password;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "T:AG");
wakeLock.acquire();
getActivity().getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
final View view = inflater.inflate(R.layout.website, container, false);
sharedPreferences = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
login = sharedPreferences.getString(this.getString(R.string.keyLogin), "");
password = sharedPreferences.getString(this.getString(R.string.keyPassword), "");
swipe = (SwipeRefreshLayout) view.findViewById(R.id.swpie);
swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
LoadWeb(view);
}
});
LoadWeb(view);
wakeLock.release();
return view;
}
public void LoadWeb(View view) {
webView = (WebView) view.findViewById(R.id.website);
WebSettings webSettings = webView.getSettings();
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
// webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.getSettings().setAppCacheEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webSettings.setDomStorageEnabled(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
webSettings.setUseWideViewPort(true);
webSettings.setSavePassword(true);
webSettings.setSaveFormData(true);
webSettings.setEnableSmoothTransition(true);
swipe.setRefreshing(true);
webView.loadUrl("https://adblast.alternet.com/auth");
final String js = "javascript:document.querySelector('input[name=email]').value='" + login + "';" +
"document.querySelector('input[name=password]').value='" + password + "';" +
"document.getElementById('submit').click()";
webView.setWebViewClient(new WebViewClient() {
// @Override
// public boolean shouldOverrideUrlLoading(WebView view, String url) {
// if (Uri.parse(url).getHost().equals("https://adblast.alternet.com/home")) {
// //open url contents in webview
// return false;
// } else {
// //here open external links in external browser or app
// Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
// startActivity(intent);
////
//// Intent intent = new Intent(Intent.ACTION_VIEW, AdBlastFragment.class); // Uri.parse(url)
//// startActivity(intent);
//
//// FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
//// fragmentTransaction.addToBackStack("tag of fragment"); // dzięki temu działa onBackPressed()
//// fragmentTransaction.replace(R.id.content_frame, new AdBlastFragment());
//// fragmentTransaction.commit();
// return true;
// }
// }
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.d("XXXXXXXXXXXXXXXXX", "your current url when webpage loading.." + url);
pd = new ProgressDialog(getActivity());
pd.setTitle("Please Wait..");
pd.setIcon(R.drawable.ad);
// pd.setProgressStyle(1);
pd.setMessage("Website is Loading..");
pd.show();
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
Log.d("YYYYYYYYYYYYYYYYYY", "your current url when webpage loading.. finish" + url);
pd.dismiss();
if (Build.VERSION.SDK_INT >= 19 && !login.isEmpty() && !password.isEmpty()) {
view.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
}
swipe.setRefreshing(false);
}
});
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int newProgress) {
((MainActivity) getActivity()).setActionBarTitleAndIcon("Page loading : " + newProgress + "%", 0);
if (newProgress == 100) {
((MainActivity) getActivity()).setActionBarTitleAndIcon(view.getTitle(), 0);
}
}
});
}
}
I jeszcze jedno małe pytanie czy jest możliwość, żeby SWIPE po odświeżeniu nie cofało mnie do strony głównej, tylko odświeżyło tą stronę/podstronę gdzie się aktualnie znajduję? 😃