我有一个适配器,可以将数据添加到布局中。布局的一个要素是链接。如果用户点击此元素,我希望它在WebView
。
现在,我有这段代码:
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
private Context context;
private List<Card> cardData;
private WebView mWebview;
public static class ViewHolder extends RecyclerView.ViewHolder {
public RelativeLayout link;
public ViewHolder(View v) {
super(v);
link = (RelativeLayout) v.findViewById(R.id.link);
}
}
public CardAdapter(Context context, List<Card> cardData) {
this.context = context;
this.cardData = cardData;
}
@Override
public CardAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_layout, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
Card card = cardData.get(position);
holder.link.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWebview = new WebView(context);
mWebview.getSettings().setJavaScriptEnabled(true);
mWebview.loadUrl("http://www.google.com");
}
});
}
@Override
public int getItemCount() {
return cardData.size();
}
}
正如您所看到的,我设置了如果用户点击了链接元素,则会创建一个新的WebView
(并打开www.google.com
)。
我的问题是,现在,它会在浏览器中打开链接,而不是在我的应用中打开。
我做错了什么?
答案 0 :(得分:0)
替换您的代码,完成
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
Card card = cardData.get(position);
holder.link.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.webView.getSettings().setJavaScriptEnabled(true);
holder.webView.loadUrl("http://www.google.com");
}
});
}
答案 1 :(得分:0)
加载WebView。
webView.setWebViewClient(new WebViewClient());
答案 2 :(得分:0)
Hello @ user7397971在适配器中添加此内容并尝试此操作。
imgad.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), WebviewActivity.class));
}
});
并添加此活动:WebviewActivity.class
公共类WebviewActivity扩展了Activity {
private WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_webview);
getIds();
webview.setVerticalScrollBarEnabled(true);
WebSettings webSettings = this.webview.getSettings();
webSettings.setJavaScriptEnabled(true);
}
@Override
protected void onPause() {
super.onPause();
}
private void getIds() {
try {
final ProgressDialog pd = ProgressDialog.show(WebviewActivity.this, "", "Please wait", true);
webview = (WebView) findViewById(R.id.WebViewurl);
webview.loadUrl(GlobalField.WEBURL);
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
pd.show();
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, final String url) {
pd.dismiss();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
并添加xml这个
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_color">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/view"
android:layout_marginTop="@dimen/margin_5_cherish"
android:fillViewport="true">
<WebView
android:id="@+id/WebViewurl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none" />
</ScrollView>
</RelativeLayout>
答案 3 :(得分:0)
首先确保您在布局中有Webview。否则,这不会将您的webview绑定到您的布局,从而在浏览器而不是webview中打开URL。
另一个解决方案是打开一个新的Activity,其中包含webview,如上所述。通过intent将URL传递给下一个活动,OnCreate加载从intent
获取的URL