简体   繁体   English

如何从Recycler View onClick缓存WebView活动的多个URL

[英]How to cache multiple URLs for a WebView Activity from Recycler View onClick

I have setup a WebViewActivity which gets the URL from the intent. 我已经设置了一个WebViewActivity ,它从意图中获取URL。 I have setup an onClickListener for my Recyclerview which opens the WebViewActivity and loads the URL. 我已经安装了onClickListenerRecyclerview这将打开WebViewActivity和加载的网址。 However the WebView does not cache each an every page it opens. 但是, WebView不会对每个打开的页面进行缓存。 What changes should i make in the code? 我应该在代码中做出哪些更改?

WebViewActivity.java WebViewActivity.java

public class WebViewActivity extends AppCompatActivity {

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

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("Search");

        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(), MainActivity.class));
            }
        });

        Intent intent = getIntent();
        String url = intent.getStringExtra("url");
        myWebView = (WebView) findViewById(R.id.webview);
        myWebView.setWebViewClient(new WebViewClient());
        WebSettings webSettings = myWebView.getSettings();
        myWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        webSettings.setJavaScriptEnabled(true);
        myWebView.loadUrl(url);
    }

    @Override
    public void onBackPressed() {
        if(myWebView.canGoBack()){
            myWebView.goBack();
        }else{
            super.onBackPressed();
            finish();
        }
    }
}

ArticleAdapter.java ArticleAdapter.java

public class ArticleAdapter extends RecyclerView.Adapter<ArticleAdapter.ArticleViewHolder> {
    private static final String TAG = "ArticleAdapter";
    private Context mContext;
    private ArrayList<String> mlist;
    private String url;
    public ArticleAdapter(Context context, ArrayList<String> list) {
        mContext = context;
        mlist = list;
    }



    @Override
    public ArticleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d(TAG, "onCreateViewHolder: called");
        Log.d(TAG, "onCreateViewHolder: GOT REQUEST CALLED===================");
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View view = layoutInflater.inflate(R.layout.article_list, parent, false);
        return new ArticleViewHolder(view);

    }

    @Override
    public void onBindViewHolder(@NonNull final ArticleViewHolder articleViewHolder, int i) {
        if(mlist.size()!=0){
           url = mlist.get(articleViewHolder.getAdapterPosition());
           articleViewHolder.name.setText(url);
           articleViewHolder.name.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                    Intent intent = new Intent(mContext, WebViewActivity.class);
                    intent.putExtra("url", articleViewHolder.name.getText());
                    mContext.startActivity(intent);
               }
           });
        }
    }

    class ArticleViewHolder extends RecyclerView.ViewHolder {

        TextView name;

        public ArticleViewHolder(View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.tv_title);
        }

    }

    @Override
    public int getItemCount() {
        return mlist.size();
    }
}

You can write URL to the shared preference or file (with append mode), then whenever you need history just read the contents from the location 您可以将URL写入共享首选项或文件(使用追加模式),然后只要您需要历史记录,只需从该位置读取内容即可

If you want cache web URLs then there is an option for WebView 如果您想要缓存Web URL,那么WebView就有一个选项

Java code Java代码

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
websettings.setAppCachePath(getContext().getCacheDir().toString());
websettings.setAppCacheEnabled(true);
websettings.setCacheMode(WebSettings.LOAD_DEFAULT);

this and this I have found useful, please refer these 这个这个 ,我发现有用的,请参阅这些

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何从一个单独的活动中从回收者视图中删除Card View - How to remove Card View from Recycler View, from a separate Activity 在一个活动中滚动多个回收者视图。 (如何使其平滑) - Scrolling of multiple recycler view in an activity. (how to make it smooth) Recycler View onClick被多次调用? - Recycler View onClick being called multiple times? 如何从活动的弹出菜单中选择“回收者视图”复选框? - How to select check boxes of recycler view from a pop menu in an activity? 如何将数据从活动传递到 android 中的回收器视图适配器 - How to pass data from a activity to a recycler view adapter in android 从另一个活动将项目添加到回收者视图 - Add items to recycler view from another activity 如何从第二个活动中获取 ArrayList 并将其显示在主活动的 Recycler 视图中 - How to get ArrayList from second Activity and show it in a Recycler view in the Main Activity 碎片活动的回收者视图 - Recycler View on Fragment Activity 使用导航组件单击 RecyclerView 项目时如何从 RecyclerView OnClick 侦听器更改片段 - How to change fragment from the Recycler View OnClick Listener when RecyclerView item is clicked using Navigation Components 如何从其 Recycler View Adapter 调用 Activity 的方法? 或者更好,如何从适配器访问活动的 UI 元素? - How do i call a method of an Activity from its Recycler View Adapter? Or better,How to access the UI elements of an activity from the adapter?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM