programing

안드로이드.뷰부풀리기예외:이진 XML 파일: 클래스 조각을 채우는 동안 오류가 발생했습니다.

starjava 2023. 8. 15. 09:41
반응형

안드로이드.뷰부풀리기예외:이진 XML 파일: 클래스 조각을 채우는 동안 오류가 발생했습니다.

설명할 수 없는 매우 답답한 오류가 있습니다.는 로▁uses다▁applic▁▁android▁an▁i▁created 만들었습니다.Android AppCompat이전 버전과 호환됩니다.다음은 제 주요 활동 레이아웃 파일입니다.

<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)

오류를 수정하는 방법을 알려주세요, 감사합니다 :)

오랜 디버깅 시간이 지난 후에 이 문제를 해결했습니다.(아직 이유를 설명할 수는 없지만요.가 재산을 것.android:nameclass(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" />

이 도움을 바랍니다 :)

TL/DR: 상위 수준 레이아웃 XML에서 참조되는 조각을 만드는 동안 예외가 발생했습니다. 이 예외로 인해 상위 수준 레이아웃 확장이 실패했지만, 초기 예외는 보고되지 않았습니다. 상위 수준의 확장 오류만 스택 추적에 표시됩니다.근본 원인을 찾으려면 초기 예외를 포착하고 기록해야 합니다.


오류의 초기 원인은 매우 다양한 것일 수 있습니다. 그렇기 때문에 사람마다 무엇이 문제를 해결했는지에 대한 답이 매우 다양합니다.에게는, 은 어떤사에는게, 그은것과 .id,class또는name특성. 의 경우 문제 으로 인해 했습니다.다른 경우에는 권한 문제 또는 빌드 설정 때문에 발생했습니다.저에게, 그것들은 문제를 해결하지 못했습니다. 대신에, 오직 다음과 같은 곳에만 존재하는 그리기 가능한 자원이 있었습니다.drawable-ldrtl-xhdpi와 같은 적절한 장소에서 대신에.drawable.

하지만 그것들은 세부사항일 뿐입니다.큰 그림의 문제는 로그캣에 표시되는 오류 메시지가 모든 것을 시작한 예외를 설명하지 않는다는 것입니다. XML이 fragment를 fragment는 fragment를 합니다.onCreateView()이 호출됩니다.프래그먼트의 레이아웃 XML에서 예외가 발생하면(예를 들어 프래그먼트의 레이아웃 XML을 부풀리는 동안) 상위 레이아웃 XML의 팽창이 실패합니다.이 상위 수준의 인플레이션 실패는 오류 로그에서 예외로 보고되는 것입니다.그러나 최초의 예외는 보고될 만큼 체인을 잘 따라가지 못하는 것 같습니다.

이러한 상황에서 문제는 오류 로그에 초기 예외가 표시되지 않을 때 이를 어떻게 노출시키느냐 하는 것입니다.

솔루션은 매우 간단합니다.try/catch파편의 내용물 주위를 차단합니다.onCreateView()그리고 그 안에catch합니다. 절, 예기록:

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()in,. 만약 그 안에 입니다.발견되지 않은 예외가 있는 경우에도 활동은 중단됩니다.에서 를 잡고 한다면.onCreateView()당신은 왜 그런 일이 일어났는지 알지 못할 것입니다.

추신. 저는 방금 이 대답이 @DaveHubbard와 관련이 있다는 것을 깨달았지만, 근본 원인(로깅 대 디버거)을 찾기 위해 다른 접근 방식을 사용합니다.

제공된 답변을 사용하여 문제를 해결할 수 없었습니다.마지막으로 변경한 내용:

<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();
    }

그리고 그것은 동작한다.
fragment 내부에서 사용하는 경우 getSupportFragmentManager 대신 getChildFragmentManager를 사용합니다.

저도 같은 문제가 있었습니다. 이 스레드의 모든 답을 시도했지만 소용이 없었습니다.제 해결책은, 저는 활동 XML에 ID를 추가하지 않았습니다. 저는 그것이 문제가 될 것이라고 생각하지 않았지만, 그렇게 되었습니다.

그래서 활동 XML에서 저는 다음을 얻었습니다.

<fragment
    android:name="com.covle.hellocarson.SomeFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

하지만 그랬어야 했어요:

<fragment
    android:id="@+id/some_fragment"
    android:name="com.covle.hellocarson.SomeFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

만약 누군가가 기꺼이 이것이 왜 그런지에 대해 언급한다면, 저는 다른 사람들에게 귀를 기울이고, 이것이 도움이 되기를 바랍니다.

더 이상 필요하지 않을 수도 있지만, 더 많은 독자들이 도움이 된다면요.저도 똑같은 것을 가지고 있습니다.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.

청취자를 구현하지 않았기 때문에 저도 같은 문제가 있습니다.를 참음코조와 함께 하십시오./*Add This!*/.

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

참고로, 제 fragment 클래스는 다음과 같습니다.

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);
    }
}

편집:

또한 다른 상황에서도 예외가 있을 때 동일한 오류 메시지가 표시됩니다.onCreateFragment다음과 같은 것이 있습니다.

@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는 분히명, 는나▁a를 받습니다.null포인터 예외입니다.저는 당신이 이와 같은 실수에도 주의할 것을 제안할 것입니다.

NavigationDrawerFragment는 안드로이드를 확장하는 것입니까?support.v4.app.파편?다시 말해, 당신은 올바른 패키지를 수입하고 있습니까?

import android.support.v4.app.Fragment;

저도 이 문제가 있었습니다.저는 수입을 대체하여 해결했습니다.MainActivity그리고.NavigationDrawerFragment

부터

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();

기능을 다기업습다니했데트이능을에 했습니다.NavigationDrawerFragment

private ActionBar getActionBar()
{
    return ((ActionBarActivity)getActivity()).getSupportActionBar();
}

저는 이 문제에 직면했고 다음 코드를 사용하여 해결했습니다.저는 하위 조각 관리자를 사용하여 조각 거래를 시작하고 있었습니다.

레이아웃:

                  <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);

다음 코드는 childfragment manager를 사용하여 추가된 fragment를 어떻게 제거했는지 설명합니다.

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

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

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

        youTubePlayer = null;
    }

저는 비슷한 문제를 반복해 왔습니다.오류 메시지는 실제 원인에 관계없이 세부 정보를 거의 제공하지 않는 경우가 많습니다.하지만 저는 더 유용한 정보를 얻을 수 있는 방법을 찾았습니다.내부 안드로이드 클래스 'Layout Inplater'로 밝혀졌습니다.java'(안드로이드).view package)에는 예외를 다시 인식하는 'view' 메서드가 있지만 세부 정보를 선택하지 않기 때문에 원인에 대한 정보가 손실됩니다.

저는 Android Studio를 사용했고, Layout Inflator line 539(제가 작업 중인 버전에서)에 브레이크포인트를 설정했습니다. 이는 해당 '확대' 방법에서 일반적인 예외에 대한 캐치 블록의 첫 번째 줄입니다.

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

디버거에서 'e'를 보면 'cause' 필드가 보일 것입니다.그것은 실제로 무슨 일이 일어났는지에 대한 힌트를 주는 데 매우 도움이 될 수 있습니다.예를 들어, 이것이 포함된 조각의 부모가 코드에 사용되지 않더라도 ID를 가져야 한다는 것을 알게 된 방법입니다.또는 TextView에 차원에 문제가 있는 경우도 있습니다.

누군가 이걸 필요로 할 때를 대비해서요.가정:USB 케이블에 연결된 장치 전화와 IDE 판독값을 통해 앱을 실행할 수 있습니다.명령 프롬프트로 이동하여 문제 확인: adblogcat 입력

그런 다음 IDE에서 앱을 실행합니다.당신은 예외입니다.

내 경우:위젯 "스페이스"를 지원하지 않는 모바일 장치에 버전 2.3의 안드로이드 앱을 배포하고 있었습니다.

탐색에 이 이름 필드 추가

안드로이드: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">

이 문제는 다른 클래스(이 경우 뷰)를 확장하는 사용자 지정 클래스가 있고 클래스에 필요한 모든 생성자를 가져오지 않는 경우에 발생합니다.

예:public class CustomTextView extends TextView{}

이 클래스에는 4명의 컨스트럭터가 있으며, 한 명을 놓치면 충돌합니다.사실 롤리팝이 사용한 마지막 것을 놓쳐서 그 생성자를 추가했고 잘 작동했습니다.

우리는 또한 build.gradle(app)에 다음을 추가해야 합니다.

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'

새로운 레이아웃이나 새로운 디자인 기능을 사용할 때마다 사용할 수 있습니다.이것이 당신에게 도움이 되기를 바랍니다.

게시물에서 했듯이, 전게시물이언이듯했급서에,,
이름을 고치다

android:name="com.fragment.NavigationDrawerFragment"

로.

class = "com.fragment.NavigationDrawerFragment"

여전히, 그것은 저에게 효과가 없었습니다.그런 다음 com.fragment 부분 없이 클래스 이름을 사용했고 voila가 작동했습니다.마지막으로 변경합니다.

class = "NavigationDrawerFragment"

여기에 나와 있는 답변 중 아무 것도 도움이 되지 않자, 저는 디버깅 모드에서 앱을 실행하기로 결정했고, 제 단편(당신의 경우 NavigationDrawerFragment)에서 CreateView의 모든 줄을 가로질러 이동했습니다.그리고 NullPointer 때문에 fragment가 부풀리기 어렵다는 것을 알아차렸습니다.예외.예.

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

여기서 나의 SeekBar는 null로 설정되었고(적절한 레이아웃에 컨트롤을 추가하는 것을 놓쳤기 때문에) 다음 줄은 가압으로 표시된 NPE로 이동했습니다.예외.또한 위에서 제안한 대로 rodroid:name을 클래스로 이름을 변경합니다.

이 문제는 위에서 언급한 다양한 이유로 인해 발생할 수 있습니다.무엇이 잘못되었는지 알기 위해 한 줄 한 줄 디버그 흐름을 추천합니다.

오랜 시간의 노력 끝에, 위의 답변 중 어느 것도 할 수 없었던 문제를 이렇게 해결했습니다.

  1. 확다하AppCompatActivity당신을 위하여Main Activity.
  2. 더하다android:theme="@style/Theme.AppCompat.Light"의 신에게에.<Activity..../>에 시대에AndroidManifest.xml
  3. 의 신의에서.NavigationDrawerFragment수업, 수업시간 변경ActionBar에 대한 인스턴스

    ActionBar mActionBar=((AppCompatActivity)getActivity()).getSupportActionBar();
    

편집

활동레이아웃 간에 일관성이 있어야 합니다.레이아웃다음과 같은 AppCompat 테마가 있는 경우Theme.AppCompat.Light당신의 활동은 다음과 같습니다.extends AppCompatActivity.

버거 아이콘과 안드로이드 지메일 앱처럼 생긴 내비게이션 드로어를 갖고 싶었지만 결국 보기 흉한 내비게이션 드로어를 갖게 되었습니다.내 모든 수업이extends ActivityAppCompatActivity.

를 연장하기 재팩터링했습니다.AppCompatActivity마우스 오른쪽 단추를 클릭합니다.Layout Folder, 랐다골.new->Activity그리고나서Navigation Drawer Activity그리고 붐, 나를 위해 모든 것이 끝났습니다!

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"/>

재료 구성요소 특성을 참조하는 스타일 특성을 사용하고 있었습니다.하지만 제 styles.xml은...

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

클래스 해결이 충돌에 직면했던 곳.내 보기 특성이 내 앱 테마에 정의되지 않은 속성을 참조했습니다.재료 구성 요소의 올바른 부모 테마가 도움이 되었습니다.그래서 부모 속성을...

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

그래서 문제가 해결되었습니다.

무슨 일이 있었는지는 모르겠지만, Fragment를 FrameLayout으로 바꾼 것이 몇 시간 동안 고생한 끝에 제 문제를 해결했습니다.

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

아직 해결책을 찾지 못한 분들도 계시겠지만, 저의 경우 OOM(Out of Memory) 문제로 인해 문제가 발생했습니다.예를 들어 앱을 장시간 사용할 때 메모리 누수가 발생할 수 있습니다.제 스택 추적에서, 이것이 주된 이유였습니다.

이게 도움이 될지 모르겠어요.

부풀리려는 레이아웃(안드로이드.뷰)에 있는 TextView에 문제가 있었습니다.부풀리기예외: 이진 XML 파일 줄 #45: TextView 클래스를 부풀리는 중 오류가 발생했습니다.

레이아웃 부풀리기를 허용하지 않는 Android:textSize="?android:attr/textApearanceLarge" XML 특성을 설정했습니다.

왜 그런지 정확히 모르겠습니다. (나는 아직 Android에 익숙하지 않습니다 - 1년 미만의 경험이 있습니다) 시스템 속성을 호출하는 것과 관련이 있을 수 있습니다. idk, 내가 아는 것은 플레인 old @dimen/md_text_16sp(나의 관습)를 사용하자마자 문제가 해결되었다는 것입니다. :)

이게 도움이 되길...

괜찮았습니다. 4.4.2 기지는사 5+다니없었.원인: 사용자 정의 보기의 초기화 안에서 다음을 만들고 있었습니다.TextView(Context context, AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes)API 21+입니다.

2은 Android Studio 2.1에 이 달렸음에도 불평하지 TargetApi(21)Android Studio 2.2는 이를 수정하여 오류로 올바르게 표시할 것입니다.

이것이 누군가에게 도움이 되기를 바랍니다.

저는 파티에 조금 늦었지만, 이 답변 중 어떤 것도 저의 경우에 도움이 되지 않았습니다.저는 Google 지도를 SupportMapFragmentPlaceAutocompleteFragment로 사용하고 있었습니다.모든 답변이 지적했듯이 SupportMapFragment가 재생성되고 다시 그려지는 맵이라는 것이 문제입니다.

하지만 PlaceAuto CompleteFragment에도 문제가 있었습니다.SupportMapFragmentSupportMapFragment로 인해 이 문제에 직면한 사용자를 위한 해결책은 다음과 같습니다.

 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);

    }

그리고 DestroyView에서 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;
    }


}

저의 경우 문제는 이 행을 TextView에 추가했다는 것입니다.

android:background="?attr/selectableItemBackground"

이것을 제거한 후, 모든 것이 잘 작동하기 시작했습니다.

활동 레이아웃을 복사하여 붙여넣고 값을 변경하지 않았습니다.

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

이것을 새로운 활동 이름으로 업데이트한 후, 그것은 나에게 효과가 있었습니다.

AndroidManifest.xml에 정의된 "android:targetSdkVersion"에 대한 기본적인 문제가 있다고 생각합니다.제 경우, 제가 정의한 초기 값은 다음과 같습니다.

android:targetSdkVersion=16

다음으로 변경했습니다.

android:targetSdkVersion=22

그것이 나의 모든 오류를 해결했습니다.따라서 안드로이드 앱을 구축하기 전에 올바른 "targetSdkVersion"을 설정하는 것도 중요합니다.

만약 다른 사람이 여기에 와서 답이 문제 해결에 도움이 되지 않는다면, 한 가지 더 시도해야 합니다.

다른 사람들이 언급했듯이, 이는 일반적으로 Java에서 잘못한 것과 달리 XML 자체에 내포된 문제로 인해 발생합니다.저의 경우, 그것은 매우 쉽게 고칠 수 있는 (그리고 바보 같은) 실수였습니다.

다음과 같은 코드가 있었습니다.

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

시스템이 인식할 수 있도록 vin 'View'를 대문자로 표시하기만 하면 되었습니다.XML 자동 완성이 적절한 보기와 일치하도록 사용자 정의 보기(또는 조각, 재활용 보기 등)에 모두 대문자로 표시된 적절한 선언이 있는지 확인합니다.

저도 이 오류가 있었는데, 아주 오랜 디버깅 끝에 문제는 FrameActivity 대신 MainClass 확장 Activity가 문제가 되지 않았다는 것이었습니다.도움이 되길 바랍니다.

저 같은 경우에는.

내가 부풀리려고 했던 레이아웃은

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

태그를 제거하고 고정했습니다.

저는 Activity를 위해 설계된 이전 레이아웃을 View-Page 어댑터로 부풀리려고 했습니다.

저의 실수는 다른 문제로 인해 발생했습니다.

활동에서 해당 조각으로 번들을 전달하는 중이었습니다.fragment에서 번들을 수신하는 코드를 댓글로 달았을 때 오류가 사라졌습니다.알고 보니, 제 오류는 null을 반환하는 아래의 "getArguments();" 부분 때문이었습니다.

Bundle args = getArguments();

Activity sending code를 확인한 결과, 아래 내용에 어리석은 실수가 있었다는 것을 알게 되었습니다.

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가 아닌 이 오류를 발생시키는지는 모르겠지만, 누군가가 같은 시나리오를 사용하는 경우에 내 오류를 해결했습니다.

언급URL : https://stackoverflow.com/questions/19874882/android-view-inflateexception-binary-xml-file-error-inflating-class-fragment

반응형