android.view.InflateException:二进制XML文件:错误膨胀类片段

时间:2013-11-09 10:26:05

标签: android

我有一个非常令人沮丧的错误,我无法解释。我创建了一个使用Android AppCompat的Android应用程序,使其与旧版本兼容。这是我的主要活动布局文件:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    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">

    <!-- As the main content view, the view below consumes the entire
         space available using match_parent in both dimensions. -->
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- android:layout_gravity="start" tells DrawerLayout to treat
         this as a sliding drawer on the left side for left-to-right
         languages and on the right side for right-to-left languages.
         If you're not building against API 17 or higher, use
         android:layout_gravity="left" instead. -->

    <!-- The drawer is given a fixed width in dp and extends the full height of
         the container. -->
    <fragment android:id="@+id/navigation_drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:name="com.fragment.NavigationDrawerFragment" />

</android.support.v4.widget.DrawerLayout>

这是我活动的主要代码:

public class MainActivity extends ActionBarActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
   }
}

这里的主要问题是:上面的代码几乎可以在几乎所有设备上运行(受激设备或某些真实设备)。但是当我在三星S3上运行时。它注意到了这个错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{view.MainActivity}: android.view.InflateException: Binary XML file line #25: Error inflating class fragment
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2081)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2106)
            at android.app.ActivityThread.access$700(ActivityThread.java:134)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1217)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4856)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class fragment
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:316)
            at android.app.Activity.setContentView(Activity.java:1901)
            at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:208)
            at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:111)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76)

请告诉我如何修复错误,谢谢:)

39 个答案:

答案 0 :(得分:113)

经过长时间的调试,我已经解决了这个问题。 (虽然我还是无法解释原因)。我将属性android:name更改为class。 (虽然在Android Document上,他们说这些属性是相同的,但它可以工作!!!)

所以,它应该改变:

 android:name="com.fragment.NavigationDrawerFragment"

class = "com.fragment.NavigationDrawerFragment"

所以,新的布局应该是:

<!-- As the main content view, the view below consumes the entire
     space available using match_parent in both dimensions. -->
<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<!-- android:layout_gravity="start" tells DrawerLayout to treat
     this as a sliding drawer on the left side for left-to-right
     languages and on the right side for right-to-left languages.
     If you're not building against API 17 or higher, use
     android:layout_gravity="left" instead. -->

<!-- The drawer is given a fixed width in dp and extends the full height of
     the container. -->
<fragment android:id="@+id/navigation_drawer"
    android:layout_width="@dimen/navigation_drawer_width"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    class = "com.fragment.NavigationDrawerFragment" />

希望这有帮助:)

答案 1 :(得分:27)

我无法使用提供的答案解决我的问题。最后我改变了这个:

<fragment
android:id="@+id/fragment_food_image_gallery"
android:name="ir.smartrestaurant.ui.fragment.ImageGalleryFragment"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout="@layout/fragment_image_gallery"
tools:layout="@layout/fragment_image_gallery" />

到此:

<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="200dp" />

private void showGallery() {
    ImageGalleryFragment fragment = new ImageGalleryFragment()
    getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, fragment)
                .commit();
    }

它有效。
如果您在片段内使用它,请使用 getChildFragmentManager 而不是 getSupportFragmentManager

答案 2 :(得分:15)

我有同样的问题,问题,尝试了这个线程中的所有答案无济于事。我的解决方案是,我没有在Activity XML中添加ID。我认为这不重要,但确实如此。

所以在我有的Activity XML中:

public event EventHandler CanExecuteChanged {
    add {
        CommandManager.RequerySuggested += value;
    }
    remove {
        CommandManager.RequerySuggested -= value;
    }
}

但应该有:

m_ButtonCommand= new RelayCommand(Submit, CanSubmit);

now method for this submit:
 private bool CanSubmit(object obj)
        {
            if(thistext available)
                return true; 
             else
                return false;  

        }
 public void Submit(object _)
  {//... code}

 public event EventHandler CanExecuteChanged {
        add {
            CommandManager.RequerySuggested += value;
        }
        remove {
            CommandManager.RequerySuggested -= value;
        }
    }

如果有人愿意评论为什么会这样,我会全神贯注,对其他人,我希望这会有所帮助。

答案 3 :(得分:12)

您可能不再需要它,但如果进一步的读者觉得它有用。我有完全相同的android.view.InflateException:...Error inflating class fragment。我有所有正确的库包括在内。通过在AndroidManifest.xml文件中添加一个用户权限即<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

来解决此问题

顺便说一下,我正在运行Android Studio 0.8.9 on Ubuntu 12.04.

答案 4 :(得分:12)

TL / DR :在创建从更高级别布局XML引用的片段期间发生了异常。此异常导致较高级别的布局通胀失败,但未报告初始异常;只有较高级别的通胀故障才会出现在堆栈跟踪中。要找到根本原因,您必须捕获并记录初始异常

错误的最初原因可能是各种各样的事情,这就是为什么这里有很多不同的答案来解决每个人的问题。对于某些人来说,它与idclassname属性有关。对于其他人来说,这是由于权限问题或构建设置。对我来说,那些没有解决问题;相反,有一个可绘制的资源只存在于drawable-ldrtl-xhdpi,而不是像drawable那样适用的地方。

但这些只是细节。大图片的问题是,logcat中显示的错误消息并未描述启动它的异常。当更高级别的布局XML引用片段时,将调用片段onCreateView()。当片段的onCreateView() 中出现异常时(例如,在对片段的布局XML进行膨胀时),会导致更高级别布局XML的膨胀失败。这种更高级别的通胀故障是在错误日志中报告为异常的。但最初的例外似乎没有足够好地报告链。

鉴于这种情况,问题是如何在错误日志中没有显示初始异常时公开它。

解决方案非常简单:在片段try的内容周围放置catch / onCreateView()块,并在catch子句中记录异常:< / p>

public View onCreateView(LayoutInflater inflater, ViewGroup contnr, Bundle savedInstSt) {
    try {
        mContentView = inflater.inflate(R.layout.device_detail_frag, null);
        // ... rest of body of onCreateView() ...
    } catch (Exception e) {
        Log.e(TAG, "onCreateView", e);
        throw e;
    }
}

哪个片段类onCreateView()执行此操作可能并不明显,在这种情况下,对导致问题的布局中使用的每个片段类执行此操作。例如,在OP的情况下,发生异常的应用程序代码是

at android.app.Activity.setContentView(Activity.java:1901)

   setContentView(R.layout.activity_main);

因此,您需要捕获布局onCreateView()中引用的任何片段的activity_main中的异常。

在我的情况下,根本原因异常结果是

Caused by: android.content.res.Resources$NotFoundException: Resource
   "com.example.myapp:drawable/details_view" (7f02006f)  is not a
   Drawable (color or path): TypedValue{t=0x1/d=0x7f02006f a=-1
   r=0x7f02006f}

在我onCreateView()中捕获并明确记录之前,此异常未显示在错误日志中。记录后,问题很容易诊断和修复(details_view.xml仅在ldrtl-xhdpi文件夹下存在,出于某种原因)。关键是捕获问题根源的异常,并暴露它。

所有片段的onCreateView()方法中作为样板文件执行此操作并没有什么坏处。如果那里存在未捕获的异常,则无论如何都会使活动崩溃。唯一的区别是,如果你在onCreateView()中捕获并记录异常,你就不会知道它为什么会发生。

P.S。我刚刚意识到这个答案与@ DaveHubbard有关,但是使用不同的方法来查找根本原因(日志与调试器)。

答案 5 :(得分:11)

我有同样的问题,因为我没有实现监听器。请使用/*Add This!*/查看以下代码。

public class SomeActivity extends AppCompatActivity
        implements BlankFragment.OnFragmentInteractionListener /*Add this!*/ 
{
    @Override                                                  /*Add This!*/
    public void onFragmentInteraction(Uri uri){                /*Add This!*/
    }                                                          /*Add This!*/
}

仅供参考,我的片段类如下:

public class SomeFragment extends Fragment {

    private OnFragmentInteractionListener mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(Uri uri);
    }
}

编辑:

onCreate的{​​{1}}函数中存在异常时,我也会在另一种情况下发现同样的错误消息。我有以下内容:

Fragment

因为我重用了这个片段,所以我总忘了设置参数。然后,@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); int ID = getArguments().getInt("val"); return rootView; } 的结果为getArguments()。显然,我在这里得到一个null指针异常。我建议你也要关注这样的错误。

答案 6 :(得分:8)

您的NavigationDrawerFragment是否扩展了android.support.v4.app.Fragment?换句话说,你导入的是正确的包吗?

import android.support.v4.app.Fragment;

答案 7 :(得分:6)

我也遇到过这个问题。我通过替换MainActivityNavigationDrawerFragment

中的导入来解决这个问题

import android.app.Activity;
import android.app.ActionBar;

import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;

我更新了MainActivity以扩展ActionBarActivity而不是活动

public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks

还可以使用ActionBar actionBar = getSupportActionBar();来获取ActionBar

我更新了NavigationDrawerFragment

中的以下功能
private ActionBar getActionBar()
{
    return ((ActionBarActivity)getActivity()).getSupportActionBar();
}

答案 8 :(得分:5)

我遇到了这个问题,并使用以下代码解决了这个问题。我正在使用childfragment manager开始片段事务。

布局:

                  <fragment
                    class="com.google.android.youtube.player.YouTubePlayerSupportFragment"
                    android:id="@+id/youtube_fragment"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

这就是我开始片段交易的方式:

   youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment);

以下代码解释了我如何删除使用childfragmentmanger添加的片段。

@Override
    public void onDestroyView() {
        super.onDestroyView();

        youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment);

        if (youTubePlayerFragment != null)
        {
            getChildFragmentManager().beginTransaction().remove(youTubePlayerFragment).commitAllowingStateLoss();
        }

        youTubePlayer = null;
    }

答案 9 :(得分:4)

我一直有类似的问题。无论实际原因如何,错误消息通常都会提供非常少的细节。但我找到了获得更多有用信息的方法。事实证明,内部的android类&#39; LayoutInflater.java&#39; (在android.view包中)有一个&#39; inflate&#39;重新抛出异常但没有获取详细信息的方法,因此您将丢失原因信息。

我使用了AndroidStudio,并在LayoutInflator第539行(在版本I&#39; m中工作)设置了一个断点,这是一个通用异常的第一行,即&#39; inflate&#39 ;方法:

        } catch (Exception e) {
            InflateException ex = new InflateException(
                    parser.getPositionDescription()
                            + ": " + e.getMessage());
            ex.initCause(e);
            throw ex;

如果你看看&#39; e&#39;在调试器中,您将看到一个&#39;原因&#39;领域。它可以帮助您提供有关真实情况的提示。例如,我发现包含的片段的父元素必须具有id,即使代码中没有使用它也是如此。或者说TextView存在维度问题。

答案 10 :(得分:3)

以防有人需要这个。 假设:设备电话连接到USB电缆和IDE读取启动 该应用程序。 转到命令提示符以确定问题: 输入adb logcat

然后从IDE启动您的应用。 你会例外。

就我而言:我正在将2.3版的Android应用程序部署到移动设备上 不支持小部件&#34; Space&#34;

答案 11 :(得分:3)

如果您有一个扩展不同类(在本例中为视图)的自定义类,并且不导入该类所需的所有构造函数,则会出现此问题。

例如:public class CustomTextView扩展TextView { }

这个类有4个构造函数,如果你错过任何一个,它会崩溃。事实上我错过了Lollipop使用的最后一个添加了构造函数并且工作正常。

答案 12 :(得分:2)

在这里没有任何答案帮助我之后,我选择在调试模式下运行app,在我的片段中移动onCreateView的每一行(在你的情况下为NavigationDrawerFragment)。并注意到由于NullPointerException,该片段难以充气。 E.g。

mySeekBar = (SeekBar) getActivity().findViewById(R.id.mySeekBar);
mySeekBar.setOnSeekBarChangeListener(this);

这里mySeekBar被设置为null(因为我错过了在适当的布局中添加控件)并且下一行进入了NPE,它出现为InflateException。 另外,如上所述,将android:name重命名为class。

由于上述各种原因,可能会出现此问题。我会建议逐行调试流程来了解错误。

答案 13 :(得分:2)

我们还必须在build.gradle(app)中添加以下内容

{{1}}

每当我们使用新的布局或新的设计功能时。 希望这可以帮助你。

答案 14 :(得分:1)

我不知道这是否会有所帮助。

我在布局中遇到的TextView遇到了这个问题我试图充气( android.view.InflateException:二进制XML文件行#45:错误导致类TextView )。

我设置了以下XML属性 android:textSize =“?android:attr / textAppearanceLarge”,这不允许布局膨胀。

不确切知道为什么,(我对Android仍然有点新 - 不到一年的经验),可能与调用系统属性有关,idk,所有我知道,只要我使用普通的 @ dimen / md_text_16sp 这是我的习惯),问题就解决了:)

希望这会有所帮助......

答案 15 :(得分:1)

android.view.InflateException: Binary XML file line #16: Error inflating class com.google.android.material.bottomappbar.BottomAppBar

视图可以是任何无法膨胀的东西,当解析XML文件中引用的视图的类名或名称属性冲突时,就会发生这种错误。

当我遇到相同的错误时,我将UI-XML文件中的所有内容都清理干净了, 我正在使用的视图,

   <com.google.android.material.bottomappbar.BottomAppBar
    android:id="@+id/bottomAppBar"
    style="@style/Widget.MaterialComponents.BottomAppBar.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:hideOnScroll="true"
    app:menu="@menu/bottom_app_bar"
    app:navigationIcon="@drawable/ic__menu_24"/>

我使用的是样式属性,它引用了Material Components属性。 但是我的styles.xml有...

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
....
</style>

班级解决面临冲突的地方。我的视图属性引用了我的应用主题中未定义的属性。来自材料组件的正确父主题对我有所帮助。 所以我将parent属性更改为...

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
...
</style>

哪个解决了这个问题。

答案 16 :(得分:1)

我参加聚会有点晚了,但在我的案例中,非这些答案对我有所帮助。我在我的片段中使用Google地图作为 SupportMapFragment PlaceAutocompleteFragment 。由于所有答案都指出问题在于SupportMapFragment是要重新创建和重绘的地图。

但是我也遇到了PlaceAutocompleteFragment的问题。因此,对于那些因 SupportMapFragment SupportMapFragment

而面临此问题的人而言,这是一个可行的解决方案
 mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment);
    FragmentManager fm = getChildFragmentManager();

    if (mapFragment == null) {
        mapFragment = SupportMapFragment.newInstance();
        fm.beginTransaction().replace(R.id.mapFragment, mapFragment).commit();
        fm.executePendingTransactions();
    }

    mapFragment.getMapAsync(this);

    //Global PlaceAutocompleteFragment autocompleteFragment;


    if (autocompleteFragment == null) {
        autocompleteFragment = (PlaceAutocompleteFragment) getActivity().getFragmentManager().findFragmentById(R.id.place_autoCompleteFragment);

    }

在onDestroyView中清除SupportMapFragment和SupportMapFragment

@Override
public void onDestroyView() {
    super.onDestroyView();


    if (getActivity() != null) {
        Log.e("res","place dlted");
        android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();
        android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.remove(autocompleteFragment);
        fragmentTransaction.commit();

        autocompleteFragment = null;
    }


}

答案 17 :(得分:1)

我在4.4.2设备上有这个,但5+很好。原因:在自定义视图的初始化中,我创建了一个TextView(Context context, AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes),即API 21 +。

即使注释TargetApi(21),Android Studio 2.1也不会抱怨它。显然,Android Studio 2.2会更正此问题,并将其正确显示为错误。

希望这有助于某人。

答案 18 :(得分:0)

打开gradle.properties并添加以下行:

android.enableAapt2=false

参考:https://github.com/chrisjenx/Calligraphy/issues/417#issuecomment-365177808

答案 19 :(得分:0)

我不知道发生了什么,但是经过数小时的努力,将 Fragment 更改为 FrameLayout 解决了我的问题。

<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />

答案 20 :(得分:0)

对我来说,我复制粘贴一个活动布局,但我没有更改

中的值
<androidx.constraintlayout.widget.ConstraintLayout>
...
tools:context=""  <!-- Check this value -->
</androidx.constraintlayout.widget.ConstraintLayout>

使用新的活动名称更新后,它对我有用。

答案 21 :(得分:0)

我也遇到了这个错误。

尝试捕获抛出错误的方法,我找到了解决我的具体问题的方法。

就我而言,我使用了两个标准主题:浅色和深色。

因此,我不得不(在必要时)以这种方式将颜色资源引用应用于颜色、可绘制对象和视图:

android:color="?accentColor"

这样系统就会知道根据当前主题使用哪种颜色。

在我的 DrawerLayout 中,我有一个用于 ListView 项目(菜单)的自定义选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="?colorAccent" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="?colorAccent" />
        </shape>
    </item>
</selector>

到目前为止,较低的 API 已经很好地解析了这些颜色引用。然而,在这个选择器中,它不起作用。

为每个主题制作一个选择器,将任何 ?colorAccent 分别更改为 t1colorAccentt2colorAccent,解决了我的问题。

答案 22 :(得分:0)

在我的特殊情况下,问题是我将此行添加到了TextView中:

android:background="?attr/selectableItemBackground"

删除此选项后,一切开始正常运行。

答案 23 :(得分:0)

当停止管理片段的活动并尝试再次打开它时,可能会发生此异常,因此在这种情况下,丢失状态的活动将不会对NavHostFragment进行调整。 要对其进行修复,请尝试完成活动的生命周期,以便通过FrgamentManager重新加载NavHostFragment。

在管理片段的“活动”中,放置以下内容:

@Override
protected void onStop() {
    super.onStop();
    this.finishActivity(0);
}

答案 24 :(得分:0)

此错误确实令人困惑。就我而言,我的片段缺少默认的空参数减去构造函数。在我的片段中添加空构造函数后,问题解决了。

答案 25 :(得分:0)

检查Proguard

对于我的一个课程,我遇到了这个错误并与一个ClassNotFoundException相结合,最终只需要检查我的proguard-rules.pro。该文件位于您的app目录中的YourAppName目录下。我需要添加以下两行:

-keep class com.gbros.tabslite.data.** { *; }
-keepattributes Exceptions, Signature, InnerClasses 

tabslite是我的应用程序名称,而我正在获取的ClassNotFoundException文件位于data文件夹中。

答案 26 :(得分:0)

FWIW:我越来越 “ Android.Views.InflateException Message =二进制XML文件第1行:二进制XML文件第1行:膨胀类android.view.TextureView时出错”

我是android表单设计的新手。在尝试在某些按钮上添加边框时,我发现了一条SO帖子,启发了我创建如下所示的buttonborder.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@android:color/transparent" />
<stroke android:width="1dp" android:color="@android:color/white"/>

然后为我添加的每个按钮

android:background="@drawable/buttonborder"

但是,出于我的热情,我也将其添加到TextureView中-这是我的问题。当我从TextureView中删除该行时,一切正常。

答案 27 :(得分:0)

android:name和class:可以互换吗?

大概是。我只用过class,这似乎是大多数Google例子使用的东西,但是我确实在某些示例中看到了他们在哪里使用android:name。不幸的是,没有关于片段的正式和完整的文档。

使用

class = "com.fragment.NavigationDrawerFragment"

装有

android:name="com.fragment.NavigationDrawerFragment"

这似乎意味着程序首先看起来是“ class”属性。并在失败时看起来“名称”属性。因此,如果更有效,使用“类”是正确的

答案 28 :(得分:0)

在导航中添加此名称字段

  

android:name =“ androidx.navigation.fragment.NavHostFragment”

   <fragment
             android:id="@+id/container"
             android:layout_width="match_parent"
             android:layout_height="0dp"
             android:name="androidx.navigation.fragment.NavHostFragment"
             app:navGraph="@navigation/navigation"
             app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
             app:layout_constraintTop_toTopOf="parent">

答案 29 :(得分:0)

当我在fragment.xml的根目录中有RecyclerView时,出现了此错误,

但是当我用ViewGroup包装它时,该应用程序运行良好。

答案 30 :(得分:0)

经过长时间的尝试,这就是我在上述答案都没有解决之后的问题。

  1. AppCompatActivity活动而不是Main扩展Activity
  2. android:theme="@style/Theme.AppCompat.Light"添加到<Activity..../>
  3. 中的AndroidManifest.xml
  4. NavigationDrawerFragment班级中,将ActionBar个实例更改为

    ActionBar mActionBar=((AppCompatActivity)getActivity()).getSupportActionBar();
    
  5. 修改

    应该是活动布局之间的一致性。 如果布局具有 AppCompat主题之一,例如Theme.AppCompat.Light,则活动应为extends AppCompatActivity

    我希望汉堡图标和导航抽屉看起来像 Android Gmail应用,但我最终得到了一个丑陋的导航抽屉。 所有这些都是因为我的所有课程extends Activity而不是AppCompatActivity

    我重新考虑整个项目以扩展AppCompatActivity,然后右键点击Layout Folder,选择new - &gt; Activity然后Navigation Drawer Activity和Boom,一切都为我完成了!

答案 31 :(得分:0)

我遇到了同样的问题,在我的情况下,包名错了,修复它解决了问题。

答案 32 :(得分:0)

我的错误是由不同的问题引起的。

我正在将一个来自Activity的包传递给它的片段。 当我评论在片段中接收束的代码时,错误消失了。 事实证明,我的错误是由于下面的“getArguments();”返回null的部分。

Bundle args = getArguments();

检查活动发送代码后,我意识到我在下面有一个愚蠢的错误;

Bundle bundle =new Bundle();
 bundle.putInt("recipeID", recipe_position);
 Fragment mainFragment = new MainActivityFragment();
 mainFragment.setArguments(bundle);
 FragmentManager fragmentManager = getSupportFragmentManager();
 --> fragmentManager.beginTransaction()
                        .replace(R.id.container, new  MainActivityFragment(),
                                DetailRecipeActivityFragment.TAG)
                        .commit();

我正在用箭头创建一个新片段。而我应该使用已经拥有我的捆绑包的预先实例化的片段。 所以应该是:

Bundle bundle =new Bundle();
 bundle.putInt("recipeID", recipe_position);
 Fragment mainFragment = new MainActivityFragment();
 mainFragment.setArguments(bundle);
 Fragment mainFragment = new MainActivityFragment();
 FragmentManager fragmentManager = getSupportFragmentManager();
 -->fragmentManager.beginTransaction()
                        .replace(R.id.container, mainFragment,
                                DetailRecipeActivityFragment.TAG)
                        .commit();

我不知道为什么它会抛出这个错误而不是NPE,但这解决了我的错误以防有人有相同的情况

答案 33 :(得分:0)

就我而言。

我试图膨胀的布局有

<include 
 layout  = "...."
/>

标记,删除它修复它。

我试图将先前为Actvity设计的布局扩展到view-pager适配器。

答案 34 :(得分:0)

我认为基本问题是&#34; android:targetSdkVersion&#34;这是在AndroidManifest.xml中定义的。就我而言,我定义的初始值为:

public static void main(String[] args) { Variant variant1 = new Variant("1", "100"); Variant variant2 = new Variant("2", "200"); Variant variant3 = new Variant("3", "200");

ArrayList<Variant> variantList = new ArrayList<>(); variantList.add(variant1); variantList.add(variant2); variantList.add(variant3); System.out.println(Variant.isListContainsDuplicateEntries(variantList));

我把它改为:

android:targetSdkVersion=16

解决了我的所有错误。因此,设置正确的&#34; targetSdkVersion&#34;在构建Android应用程序之前也很重要。

答案 35 :(得分:0)

如果其他人来到这里并且答案无法解决问题,还有一件事要尝试。

正如其他人所提到的,这通常是由嵌套在XML本身的问题引起的,而不是你在Java中做错的问题。就我而言,这是一个非常容易(和愚蠢)的错误。

我有这样的代码:

<view
    android:layout_width="fill_parent"
    android:layout_height="1dip"
    android:id="@+id/view44"
    android:background="@color/gray"
    />

当我所要做的只是将视图中的v大写时,查看&#39;以便系统认识它。检查您的自定义视图(或片段,回收视图等)是否都预先具有适当的大写声明,以便XML自动完成将其与相应的视图匹配。

答案 36 :(得分:0)

如前一篇文章所述,
重命名

android:name="com.fragment.NavigationDrawerFragment"

class = "com.fragment.NavigationDrawerFragment"

但是,它对我不起作用。然后,我只使用了没有com.fragment部分的类名,瞧它工作了。所以最后改为

class = "NavigationDrawerFragment"

答案 37 :(得分:0)

对于一些仍然没有找到解决方案的人,在我的情况下,它发生了,因为我有一个OOM(内存不足)问题。当您长时间使用应用程序时,如果您的应用程序中存在内存泄漏,则可能会发生这种情况。在我的堆栈跟踪中,这是主要原因。

答案 38 :(得分:0)

我也遇到了这个错误,经过很长时间的调试后,问题就变成了我的MainClass扩展了Activity而不是FrameActivity,在我的情况下,xml不是问题。希望能帮到你。