我无法将主活动中的webview链接到内容布局



这里我尝试在我的应用程序屏幕中添加菜单,当我运行应用程序时,它崩溃并显示这个错误:@layout/activity_main不包含id为webview

的声明了解我的问题,看看我的代码

活动布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:itemIconTint="@drawable/tab"
app:itemTextColor="@drawable/tab"
app:headerLayout="@layout/nav_header"
app:menu="@menu/menu" />
</androidx.drawerlayout.widget.DrawerLayout>

和这个内容布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<WebView
tools:context=".MainActivity"
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</WebView>
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="SMART_BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>

</LinearLayout>

部分我的代码从主活动(因为它太长),错误显示与此(R.id.webview)


public class MainActivity extends AppCompatActivity {
LinearLayout LinearLayoutView;
private WebView webView;
private AdView mAdView;
private InterstitialAd mInterstitialAd;
DrawerLayout drawer_layout;
NavigationView nav_view;
ActionBarDrawerToggle drawerToggle;


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


drawer_layout = findViewById(R.id.drawer_layout);
nav_view = findViewById(R.id.nav_view);
drawerToggle = new ActionBarDrawerToggle(this,drawer_layout, R.string.open, R.string.close);
drawer_layout.addDrawerListener(drawerToggle);
drawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
nav_view.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId())
{
case R.id.nav_item01:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item02:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item03:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item04:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item05:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item06:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_item07:
{
Toast.makeText(MainActivity.this, "this nav item 1 ", Toast.LENGTH_LONG).show();
}
case R.id.nav_share:
{
ShareApp();
}
case R.id.rateapp:
{
RateApp();
}
case R.id.moreapps:
{
MoreApps();
}
}
return false;
}
});

WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webviewscreen();
WebSettings webSettings = webView.getSettings();

webSettings.setJavaScriptEnabled(true);
webSettings.setSaveFormData(false);
webSettings.setSupportZoom(false);
webSettings.setGeolocationEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setUseWideViewPort(true);
webSettings.setDomStorageEnabled(true);
webView.setHapticFeedbackEnabled(false);

错误:


D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: app.example.webview, PID: 8114
java.lang.RuntimeException: Unable to start activity ComponentInfo{app.example.webview/app.example.webview.MainActivity}: android.view.InflateException: Binary XML file line #23: Binary XML file line #23: Error inflating class com.google.android.material.navigation.NavigationView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: android.view.InflateException: Binary XML file line #23: Binary XML file line #23: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: android.view.InflateException: Binary XML file line #23: Error inflating class com.google.android.material.navigation.NavigationView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:647)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:775)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:197)
at app.example.webview**strong text**.MainActivity.onCreate(MainActivity.java:58)
at android.app.Activity.performCreate(Activity.java:7009)
at android.app.Activity.performCreate(Activity.java:7000)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: android.content.res.Resources$NotFoundException: Can't find ColorStateList from drawable resource ID #0x7f0700f6
at android.content.res.ResourcesImpl.loadColorStateList(ResourcesImpl.java:1013)
at android.content.res.Resources.getColorStateList(Resources.java:1021)
at androidx.core.content.res.ResourcesCompat$Api23Impl.getColorStateList(ResourcesCompat.java:688)
at androidx.core.content.res.ResourcesCompat.getColorStateList(ResourcesCompat.java:244)
at androidx.core.content.ContextCompat.getColorStateList(ContextCompat.java:558)
at androidx.appcompat.content.res.AppCompatResources.getColorStateList(AppCompatResources.java:48)
at androidx.appcompat.widget.TintTypedArray.getColorStateList(TintTypedArray.java:179)
at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:213)
E/AndroidRuntime:     at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:141)
26 more

我看了很多视频,他们和我做的一模一样,这对他们很有帮助

在您的MainActivity类中,您将视图设置为:

setContentView(R.layout.activity_main);

但是,您的布局文件activity_main.xml不包含WebView小部件,因此您得到该错误。

请尝试在activity_main.xml文件中移动/创建WebView小部件以解决此错误。

如果你还需要什么,请告诉我。

希望对你有帮助。

从您的日志堆栈跟踪中,它表明您的NavigationView有问题:

. lang。运行时异常:无法启动活动ComponentInfo{app.example.webview/app.example.webview。MainActivity}: android.view.InflateException:二进制XML文件行#23:二进制XML文件行#23:错误膨胀类com.google.android. materier .navigation. navigationview

主要原因应该是:

原因:android.content.res。$NotFoundException:无法从可绘制的资源ID #0x7f0700f6中找到ColorStateList

所以你的@drawable/tab:

应该有问题
<com.google.android.material.navigation.NavigationView
...
app:itemIconTint="@drawable/tab"
app:itemTextColor="@drawable/tab"
... />

您应该检查@drawable/tab的值是否正确定义。

在你的activity_main.xml文件中,你必须添加如下的include标签

<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:ignore="HardcodedText">
<include
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="your content layout like this @layout/content" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/navigation_menu" />
</androidx.drawerlayout.widget.DrawerLayout> 

这个包含标签帮助MainActivity.java在类中找到(R.id.webview),由于这个包含标签android.view.InflateException将解决和你的应用程序顺利运行。