WebView 中的 RecyclerView onClick 加载 URL

RecyclerView onClick load URL in WebView

我正在使用 RecyclerView 创建一个新闻应用程序,通过单击其中的项目来加载 URL,我需要在 WebView 中而不是外部加载 Url应用程序 任何帮助将不胜感激,谢谢 :')

这是我的 代码 :

public class SniorActivity extends AppCompatActivity implements ListAdapter.OnListListener {

private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private List<ListItem> listItems;

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


    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    listItems = new ArrayList<>();

    listItems.add(new ListItem("itrm1", "press here"));
    listItems.add(new ListItem("itrm2", "press here"));
    listItems.add(new ListItem("itrm3", "اpress here"));
    listItems.add(new ListItem("itrm4", "press here"));

    adapter = new ListAdapter(listItems, this, this);
    recyclerView.setAdapter(adapter);
}

@Override
public void OnListClick(int position) {
    switch (position) {
        case 0:
            Uri uri = Uri.parse("http://www.google.com"); // missing 'http://' will cause crashed
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(intent);
            break;
        case 1:
            Toast.makeText(SniorActivity.this, "Soon", Toast.LENGTH_SHORT).show();
            break;
    }
}

}

您应该为网络视图制作另一个 activity。 activity 可以有这样的 webview :

private WebView webView;

/////////////////////////////////////////// //////////////////////////////

    webView = findViewById(R.id.web_view);

/////////////////////////////////////////// //////////////////////////////

    private void loadUrl(String url) {
    
    webView.setWebViewClient(new CustomWebViewClient());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.loadUrl(url);

    }

/////////////////////////////////////////// //////////////////////////////

private class CustomWebViewClient extends WebViewClient {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (!DetectConnection.checkInternetConnection(WebViewActivity.this)) {
            Toast.makeText(getApplicationContext(), "No Internet!", Toast.LENGTH_SHORT).show();
        } else {
            view.loadUrl(url);
        }
        return true;
    }
}

/////////////////////////////////////////// /////////////////////////////////

public static class DetectConnection {
    public static boolean checkInternetConnection(Context context) {

        ConnectivityManager con_manager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);

        return (con_manager.getActiveNetworkInfo() != null
                && con_manager.getActiveNetworkInfo().isAvailable()
                && con_manager.getActiveNetworkInfo().isConnected());
    }
}

如果上面的回答看不懂,可以试试这个,理解清楚。

MainActivity

  public class MainActivity extends AppCompatActivity {

    Button b1;
    EditText ed1;

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

          b1 = (Button) findViewById(R.id.button);
          ed1 = (EditText) findViewById(R.id.editText);

          b1.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                String url = ed1.getText().toString();
                Intent intent = new Intent(getApplicationContext(),WebViewActivity.class);
                 intent.putExtra("URL", url);
                 startActivityForResult(intent, 1);
               }
             });
          }
     }

activity_main.xml

     <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">
           <EditText
              android:id="@+id/editText"
              android:layout_width="match_parent"
              android:layout_height="wrap_content" />
           <Button
              android:id="@+id/button"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="GO"/>
      </LinearLayout>

WebViewActivity

      public class WebViewActivity extends AppCompatActivity {

      private WebView webView;

      @Override
      protected void onCreate(Bundle savedInstanceState) {

          String url = getIntent().getStringExtra("URL");

          super.onCreate(savedInstanceState);
          setContentView(R.layout.webview);
          webView = (WebView) findViewById(R.id.webView);
          webView.setWebViewClient(new MyBrowser());
          webView.getSettings().setLoadsImagesAutomatically(true);
          webView.getSettings().setJavaScriptEnabled(true);
          webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
          webView.loadUrl(url);
      }

      private class MyBrowser extends WebViewClient {
          @Override
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
              view.loadUrl(url);
              return true;
          }
      }
      }

webview.xml

       <?xml version="1.0" encoding="utf-8"?>
       <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical" android:layout_width="match_parent"
         android:layout_height="match_parent">

         <WebView
           android:id="@+id/webView"
           android:layout_width="match_parent"
           android:layout_height="match_parent">
         </WebView>
       </LinearLayout>

AndroidManifest

      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.android.mywebviewapplication">

      <uses-permission android:name="android.permission.INTERNET" />

      <application
          android:allowBackup="true"
          android:icon="@mipmap/ic_launcher"
          android:label="@string/app_name"
          android:supportsRtl="true"
          android:theme="@style/AppTheme">
          <activity android:name=".MainActivity">
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />

                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>

          <activity android:name=".WebViewActivity">
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
              </intent-filter>
          </activity>
      </application>

      </manifest>