gpt4 book ai didi

android - 如何在 Fragment 中打开一个 Activity 中的 WebView 链接?

转载 作者:行者123 更新时间:2023-12-04 04:14:58 27 4
gpt4 key购买 nike

我在 fragment 中有一个 webview,webview 有多个链接。我希望当用户单击其中一个链接时,例如阅读更多链接,它会打开我创建的应用程序内浏览器 (BrowserActivity)。我怎样才能做到这一点?

浏览器 Activity .java

public class BrowserActivity extends AppCompatActivity {

private String Url ;
private WebView Tecwebview;
private ProgressBar progressBar;
ImageButton back, forward, stop, refresh, homeButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browser);

back = (ImageButton) findViewById(R.id.back_arrow);
forward = (ImageButton) findViewById(R.id.forward_arrow);
stop = (ImageButton) findViewById(R.id.stop);
refresh = (ImageButton) findViewById(R.id.refresh);
homeButton = (ImageButton) findViewById(R.id.home);
progressBar = (ProgressBar) findViewById(R.id.probar);
progressBar.setMax(100);
Tecwebview = (WebView) findViewById(R.id.tecwebview);

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);


Tecwebview.loadUrl(Url);

if (savedInstanceState != null) {
Tecwebview.restoreState(savedInstanceState);
} else {
Tecwebview.getSettings().setJavaScriptEnabled(true);
Tecwebview.getSettings().setUseWideViewPort(true);
Tecwebview.getSettings().setLoadWithOverviewMode(true);
Tecwebview.getSettings().setSupportZoom(true);
Tecwebview.getSettings().setSupportMultipleWindows(true);
Tecwebview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);


Tecwebview.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
progressBar.setProgress(newProgress);
if (newProgress < 100 && progressBar.getVisibility() == ProgressBar.GONE) {
progressBar.setVisibility(ProgressBar.VISIBLE);
}
if (newProgress == 100) {
progressBar.setVisibility(ProgressBar.GONE);
} else {
progressBar.setVisibility(ProgressBar.VISIBLE);
}
}
});
}


Tecwebview.setWebViewClient(new MyWebViewClient());

back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Tecwebview.canGoBack()) {
Tecwebview.goBack();
}
}
});
forward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Tecwebview.canGoForward()) {
Tecwebview.goForward();
}
}
});

stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Tecwebview.stopLoading();
}
});

refresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Tecwebview.reload();
}
});
homeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Tecwebview.loadUrl("https://google.com");
}
});
}

private class MyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
progressBar.setVisibility(View.VISIBLE);
super.onPageStarted(view, url, favicon);
}


@Override
public void onPageFinished(WebView view, String url) {
progressBar.setVisibility(View.GONE);
super.onPageFinished(view, url);
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.browser, menu);
return true;
}

fragment

public class NewsFragment extends Fragment {

private WebView Tecwebview;

public NewsFragment() {

}


LinearLayout Weblinearlayout;
SwipeRefreshLayout Webswipelayout;
ProgressBar progressBar;
String url = "http://someweb.com/news/";



@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
Bundle savedInstanceState) {

View v = inflater.inflate(R.layout.fragment_home, container, false);
Tecwebview = (WebView) v.findViewById(R.id.tecwebview);
progressBar = (ProgressBar) v.findViewById(R.id.probar);
Weblinearlayout = v.findViewById(R.id.layout);
Webswipelayout = v.findViewById(R.id.swipe);
progressBar.setMax(100);
WebSettings Websettings = Tecwebview.getSettings();
Websettings.setJavaScriptEnabled(true);
Tecwebview.setWebViewClient(new WebViewClient());
Tecwebview.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
progressBar.setProgress(progress);
if (progress < 100 && progressBar.getVisibility() == ProgressBar.GONE) {
progressBar.setVisibility(ProgressBar.VISIBLE);
Tecwebview.setVisibility(View.GONE);
}

if (progress == 100) {
progressBar.setVisibility(ProgressBar.GONE);
Tecwebview.setVisibility(View.VISIBLE);
}
}
});

Webswipelayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Tecwebview.reload();
LoadWeb();
}
});

Tecwebview.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
if (Tecwebview.getScrollY()==0){
Webswipelayout.setEnabled(true);
} else {
Webswipelayout.setEnabled(false);
}
}
});

Tecwebview.setWebViewClient(new HomeFragment.MyCustomWebViewClient(){


@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Weblinearlayout.setVisibility(View.VISIBLE);
super.onPageStarted(view, url, favicon);
}

@Override
public void onPageFinished(WebView view, String url) {
Weblinearlayout.setVisibility(View.GONE);
Webswipelayout.setRefreshing(false);
super.onPageFinished(view, url);
}
});


LoadWeb();


// This code if for the on back press within webview
Tecwebview.canGoBack();
Tecwebview.setOnKeyListener(new View.OnKeyListener() {

public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == MotionEvent.ACTION_UP
&& Tecwebview.canGoBack()) {
Tecwebview.goBack();
return true;
}
return false;
}
});





return v;

}





public void LoadWeb() {
Tecwebview.loadUrl(url);
Webswipelayout.setRefreshing(true);
}

这是为了浏览器 Activity ,使浏览器 Activity webview 中的链接仅在 webview 中打开

public class MyWebViewClient extends WebViewClient {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
CookieManager.getInstance().setAcceptCookie(true);
return true;
}

最佳答案

根据我的理解,您有一个网址,例如 www.xyz.com,并且您希望在用户点击它时加载您的 Activity。如果是这样,请尝试使用以下代码,但将 targeUrl 的值更改为您的链接地址,并在我写评论的区域启动 Activity ...

Tecwebview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String targetUrl = "https//www.somelinksaddress.com/me/you";
if (targetUrl.equals(url)) {
// Start your activity here
} else {
view.loadUrl(url);
}
return true;
}
});

关于android - 如何在 Fragment 中打开一个 Activity 中的 WebView 链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60918426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com