android.view.InflateException: বাইনারি এক্সএমএল ফাইল: শ্রেণি খণ্ডকে স্ফীতকরণে ত্রুটি


151

আমার খুব হতাশার ত্রুটি আছে যা আমি ব্যাখ্যা করতে পারি না। আমি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করেছি যা 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);
   }
}

এখানে মূল সমস্যাটি হ'ল: উপরের কোডটি প্রায় ডিভাইসগুলিতে (উদ্দীপক ডিভাইস বা কিছু বাস্তব ডিভাইস) সহজেই চালিত হয়। তবে আমি যখন স্যামসাং এস 3 এ এটি চালাচ্ছি। এটি এই ত্রুটিটি লক্ষ্য করে:

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)

ত্রুটি ঠিক করতে কিভাবে দয়া করে আমাকে বলুন, ধন্যবাদ :)


1
এই লাইনে আপনি ক্লাসের নাম এবং প্যাকেজের নামটি সঠিক কিনা তা পরীক্ষা করা ব্যতীত পেয়ে যাচ্ছেন..অ্যান্ড্রয়েড: নাম = "com.hqt.hac.view.fragment. নেভিগেশন ড্রয়ারফ্র্যাগমেন্ট"
কল্যাণ পিভিএস

1
আমি পরীক্ষা করে দেখেছি এবং এই ক্লাসটি সত্য। আমি কিছু ডিভাইসগুলি সংকলন করতে এবং চালাতে পারি তবে s3 সংযুক্ত S3 নয়। আমি এখানে কিছু অদ্ভুত সমস্যাগুলি মনে করি :(
htt

আপনি ঠিক বলেছেন যদি এটি কোনও ডিভাইসে চালিত হয় এবং এস 3-তে না চালানো এটি একটি অদ্ভুত সমস্যা..আমার পরামর্শটি একবার শার্লাকফ্র্যাগমেন্ট চেক একবার ব্যবহার করার চেষ্টা করা হয়েছে ..
কল্যাণ পিভিএস

আমি ইতিমধ্যে এখানে সমস্যার সমাধান করেছি: stackoverflow.com/a/33128448/4366715
ড্যানিয়েল কিলিনস্কাস

1
যারা এই ত্রুটির কারণ নির্ণয় করার চেষ্টা করছেন তাদের জন্য: এখানকার উপাখ্যানগুলি স্থির করাগুলি একটি লাল রঙের হারিং। খণ্ডটির মুদ্রাস্ফীতি চলাকালীন একটি পূর্ব ব্যতিক্রম রয়েছে যা স্ট্যাকের সন্ধানে প্রদর্শিত হচ্ছে না । এটা কিছু হতে পারে। সমস্যা সমাধানের জন্য আপনাকে পূর্বের ব্যতিক্রমটি কী তা খুঁজে বের করতে হবে। এটি করতে, আমার উত্তর বা @ ডেভহবার্ড দেখুন।
LarsH

উত্তর:


126

ডিবাগিংয়ের জন্য দীর্ঘ সময় পরে, আমি এই সমস্যাটি স্থির করেছি। (যদিও আমি এখনও তা ব্যাখ্যা করতে পারি না) কেন। আমি সম্পত্তি পরিবর্তন android:nameকরতে class। (যদিও অ্যান্ড্রয়েড ডকুমেন্টে, তারা বলে যে এই বৈশিষ্ট্যগুলি সমান, তবে এটি কার্যকর হয় !!!)

সুতরাং, এটি থেকে পরিবর্তন করা উচিত:

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

এই সাহায্য আশা করি :)


4
অফিসিয়াল অ্যান্ড্রয়েড টিউটোরিয়ালটি অনুসরণ করার চেষ্টা করার সময় আমি এই সমস্যার মধ্যে পড়েছিলাম। আপনার স্থির (পরিবর্তন android:idকরা class) আমার জন্য কাজ করেছে। আমি পরিবর্তনের Fragmentজন্য একটি লিন্টের সতর্কতাও পেয়েছি fragment, যা আমি করেছি।
স্টিভাস্তেলান

9
@ ডাউনভোটার: এই ত্রুটিটি বিভ্রান্তিকর। এবং আমি ভাগ্যক্রমে সমাধানের উপায় খুঁজে পাই। আমার পোস্ট যদি আপনার ত্রুটিটি ঠিক করতে না পারে তবে আমি সত্যিই দুঃখিত কারণ কেন তাও আমি ব্যাখ্যা করতে পারি না। তবে আমি মনে করি এটি ডাউন ভোট গ্রহণ করা উচিত নয়। :)
এইচকিটি

2
আমি ভাবছি যদি আপনি নির্ভরযোগ্যভাবে এই দুর্ঘটনায় পেয়েছিলাম ছাড়া থেকে পরিবর্তন nameকরতে class, আমি কয়েক ব্যবহারকারীদের এই ক্র্যাশ প্রতিবেদন কিন্তু এটা নিজেকে repro করতে পারবে না ছিল!
ড্যানিয়েল উইলসন

8
আমার জন্য কাজ করে না। আমি খুবই ক্লান্ত. 2 ঘন্টা দেব এবং এটি কেন কাজ করে না তা খুঁজে পাচ্ছে না (বাইনারি এক্সএমএল ফাইল লাইন ... ভুল শ্রেণীর টুকরো টুকরো টুকরো করা)। কোন ধারণা ?
কোকোরিকো

32

প্রদত্ত উত্তরগুলি ব্যবহার করে আমি আমার সমস্যার সমাধান করতে পারিনি। অবশেষে আমি এটি পরিবর্তন করেছি:

<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


31

টিএল / ডিআর : একটি উচ্চ স্তরের লেআউট এক্সএমএল থেকে রেফারেন্স করা টুকরা তৈরির সময় একটি ব্যতিক্রম ঘটেছে । এই ব্যতিক্রম উচ্চ স্তরের লেআউট মুদ্রাস্ফীতি ব্যর্থ হয়েছে, কিন্তু প্রাথমিক ব্যতিক্রম রিপোর্ট করা হয়নি ; কেবলমাত্র উচ্চ-স্তরের মুদ্রাস্ফীতি ব্যর্থতা স্ট্যাক ট্রেসটিতে প্রদর্শিত হয়। মূল কারণটি খুঁজতে, আপনাকে প্রাথমিক ব্যতিক্রমটি ধরতে হবে এবং লগ করতে হবে


ত্রুটির প্রাথমিক কারণটি বিভিন্ন ধরণের জিনিস হতে পারে, যার কারণেই এখানে প্রতিটি ব্যক্তির জন্য সমস্যাটি স্থির করে দেওয়া হয়েছে এমন অনেকগুলি উত্তর রয়েছে। কিছু ক্ষেত্রে, এটা দিয়ে কি ছিল id, classঅথবা nameবৈশিষ্ট্যাবলী। অন্যদের জন্য এটি কোনও অনুমতি ইস্যু বা বিল্ড সেটিংয়ের কারণে হয়েছিল। আমার জন্য, তারা সমস্যাটি সমাধান করেনি; পরিবর্তে এখানে একটি অঙ্কনযোগ্য সংস্থান ছিল যা কেবলমাত্র drawable-ldrtl-xhdpiএকটি প্রযোজ্য জায়গার পরিবর্তে বিদ্যমান ছিল drawable

তবে সেগুলি কেবল বিশদ। বড় চিত্রের সমস্যাটি হ'ল লগক্যাটে প্রদর্শিত ত্রুটি বার্তাটি সমস্ত কিছু শুরু হওয়া ব্যতিক্রমটিকে বর্ণনা করে না। যখন একটি উচ্চ-স্তরের লেআউট এক্সএমএল কোনও খণ্ডকে রেফার করে, তখন খণ্ডটিকে onCreateView()বলা হয়। যখন কোনও খণ্ডে ব্যতিক্রম ঘটেonCreateView() (উদাহরণস্বরূপ খণ্ডের লেআউটটি এক্সএমএল স্ফীত করার সময়), এটি উচ্চ স্তরের লেআউট এক্সএমএলের মুদ্রাস্ফীতিকে ব্যর্থ করে দেয়। এই উচ্চ-স্তরের মুদ্রাস্ফীতি ব্যর্থতা ত্রুটি লগগুলিতে ব্যতিক্রম হিসাবে রিপোর্ট হয়ে যায়। তবে প্রাথমিক ব্যতিক্রমটি যথাযথভাবে চেইনটি ভ্রমণ করার মতো বলে মনে হচ্ছে না।

এই পরিস্থিতিটি দেওয়া, প্রশ্নটি প্রাথমিক ব্যতিক্রমটি কীভাবে প্রকাশ করা যায়, যখন ত্রুটি লগতে এটি প্রদর্শিত না হয়।

সমাধান বেশ সহজবোধ্য: একটি রাখুন 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()পারে, সেক্ষেত্রে যে সমস্যাটি লেআউটটিতে ব্যবহৃত হয়েছে তা প্রতিটি খণ্ড শ্রেণীর সাথে এটি করুন। উদাহরণস্বরূপ, ওপি-র ক্ষেত্রে, অ্যাপটির কোড যেখানে ব্যতিক্রম ঘটেছে

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()এটি কেন ঘটেছিল তা সম্পর্কে আপনি অন্ধকারে থাকবেন না।

পিএস আমি ঠিক বুঝতে পেরেছি যে এই উত্তরটি @ ডেভহবার্ডের সাথে সম্পর্কিত, তবে মূল কারণটি খুঁজে পাওয়ার জন্য (লগিং বনাম ডিবাগার) আলাদা পদ্ধতির ব্যবহার করে uses


2
আপনি সম্ভবত আমাকে ডিবাগিংয়ের কয়েক ঘন্টা বাঁচিয়েছেন। যশ!
সিজমন সাদোও

16

আমার একই সমস্যা ছিল, ইস্যু হয়েছিল, এই থ্রেডে সমস্ত উত্তর চেষ্টা করেও কোনও লাভ হয়নি। আমার সমাধানটি ছিল, আমি ক্রিয়াকলাপ এক্সএমএলে কোনও আইডি যোগ করিনি। আমি ভাবিনি যে এটি আসবে, তবে তা হয়ে গেল।

তাই কার্যকলাপের এক্সএমএলে আমার ছিল:

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

কেউ যদি এটি কেন হয় তা সম্পর্কে মন্তব্য করতে যদি খুশি হন তবে আমি সবার কান, আমি আশা করি এটি সাহায্য করবে।


1
ধন্যবাদ, এটি আমার পক্ষে কাজ করেছে। আমি কয়েক মাস ধরে একটি আইডি বাদ দিচ্ছিলাম, তবে কিছু লেআউট পরিবর্তনের পরে হঠাৎ আমার এই ক্রাশটি শুরু হয়েছিল began অ্যান্ড্রয়েড অদ্ভুত।
ইরিস্কো

আপনি উত্তর আমার জন্য কাজ করে। আমি কেবল আশ্চর্য হয়েছি যে আমি যখন অন্য কোথাও এটি ব্যবহার না করছি তখন আইডি বৈশিষ্ট্যটি কেন রাখার কথা মনে করি। তুমি কি আমাকে ব্যখ্যা করতে পার?
মশিহি

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.


আমার জন্য কাজ! অনেক ধন্যবাদ!
দাদন

12

শ্রোতাদের বাস্তবায়ন না করায় আমারও একই সমস্যা। নিম্নলিখিত কোড দেখুন /*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কার্যকারিতাটিতে কোনও ব্যতিক্রম রয়েছে 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। স্পষ্টতই, আমি nullএখানে একটি পয়েন্টার ব্যতিক্রম পাই । আমি আপনাকে এইরকম ভুলগুলিতেও নজর রাখার পরামর্শ দেব।


1
ধন্যবাদ! এটি অনেক সাহায্য!
DLee

8

আপনার নেভিগেশনড্রেভারফ্র্যাগমেন্টটি কি android.support.v4.app.Fraਮੈਂਟ প্রসারিত করছে? অন্য কথায়, আপনি কি সঠিক প্যাকেজটি আমদানি করছেন?

import android.support.v4.app.Fragment;

6

আমারও এই সমস্যা ছিল। আমি আমদানি প্রতিস্থাপন করে এটি সমাধান করেছি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();
}

আমি মনে করি এটিই সঠিক উত্তর। তবে আমি অ্যাকশনবার্যাকটিভিটির পরিবর্তে অ্যাপকম্প্যাটএক্টিভিটি ব্যবহার করেছি (অবহেলিত নয়) এবং এন্ড্রয়েড.এপ.অ্যাকশনবারটিও অপসারণ করি না (অ্যাটাচ পদ্ধতি হিসাবে এটি ব্যবহার করুন)
গ্রামথ্যানস

6

আমি এই সমস্যার মুখোমুখি হয়েছি এবং নিম্নলিখিত কোডগুলি ব্যবহার করে এটি সমাধান করেছি। চাইল্ডফ্রেগমেন্ট ম্যানেজার ব্যবহার করে আমি খণ্ডের লেনদেন শুরু করছিলাম।

লেআউট:

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

নীচের কোডগুলি ব্যাখ্যা করে যে কীভাবে আমি সেই টুকরোটি সরাল যা চাইল্ডফ্রেগমেন্টম্যানার ব্যবহার করে যুক্ত হয়েছিল।

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

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

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

        youTubePlayer = null;
    }

টিওয়াই আলি। আপনি আমার দিন বাঁচিয়েছেন!
vm345

ঠিকভাবে কাজ করে. ধন্যবাদ!
Polyariz

4

আমার একই রকম সমস্যা চালু এবং বন্ধ ছিল। প্রকৃত কারণ নির্বিশেষে ত্রুটি বার্তাটি প্রায়শই খুব সামান্য বিশদ সরবরাহ করে। তবে আমি আরও দরকারী তথ্য পাওয়ার উপায় খুঁজে পেয়েছি। দেখা যাচ্ছে যে অভ্যন্তরীণ অ্যান্ড্রয়েড বর্গ 'লেআউটইনফ্লেটার.জভা' (অ্যান্ড্রয়েড.ভিউ প্যাকেজে) একটি 'স্ফীত' পদ্ধতি রয়েছে যা একটি ব্যতিক্রম পুনরায় নিক্ষেপ করে, তবে বিশদটি গ্রহণ করে না, সুতরাং আপনি কারণটির জন্য তথ্য হারাবেন।

আমি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করেছি এবং লেআউটইনফ্লেটর লাইন 539 (আমি যে সংস্করণে কাজ করছি) তে একটি ব্রেকপয়েন্ট স্থাপন করেছি, যা সেই 'স্ফীতি' পদ্ধতিতে জেনেরিক ব্যতিক্রমের জন্য ক্যাচ ব্লকের প্রথম লাইন:

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

আপনি যদি ডিবাগারটিতে 'ই' দেখুন তবে আপনি একটি 'কারণ' ক্ষেত্রটি দেখতে পাবেন। আসলে কী ঘটেছে সে সম্পর্কে আপনাকে ইঙ্গিত দিতে এটি খুব সহায়ক হতে পারে। এইভাবে, উদাহরণস্বরূপ, আমি খুঁজে পেয়েছি যে অন্তর্ভুক্ত খণ্ডের পিতামাতার একটি আইডি থাকা আবশ্যক, এমনকি আপনার কোড ব্যবহার না করা। বা এটি একটি পাঠ্য ভিউয়ের একটি মাত্রা নিয়ে সমস্যা ছিল।


3

যদি কারও এটির প্রয়োজন হয়। অনুমানগুলি: অ্যাপ্লিকেশনটি চালু করতে ডিভাইস ফোনটি ইউএসবি কেবল এবং আপনার আইডিই পঠন। সমস্যা নির্ধারণ করতে কমান্ড প্রম্পটে যান: অ্যাডবি লগক্যাট প্রবেশ করুন

তারপরে আইডিই থেকে আপনার অ্যাপ্লিকেশনটি চালু করুন। আপনি একটি ব্যতিক্রম হবে।

আমার ক্ষেত্রে: আমি একটি মোবাইল ডিভাইসে ভার্সন ২.৩ এর একটি অ্যান্ড্রয়েড অ্যাপ স্থাপন করছি যা "স্পেস" উইজেট সমর্থন করে না


3

এই সমস্যাটি দেখা দেয় যখন আপনার একটি কাস্টম ক্লাস থাকে যা একটি পৃথক শ্রেণি প্রসারিত করে (এই ক্ষেত্রে একটি দৃশ্য) এবং শ্রেণীর জন্য প্রয়োজনীয় সমস্ত কন্সট্রাক্টরগুলি আমদানি করে না।

যেমন: পাবলিক ক্লাস কাস্টম টেক্সটভিউ টেক্সটভিউ iew {প্রসারিত করে

এই শ্রেণীর 4 জন কনস্ট্রাক্টর থাকবে এবং আপনি যদি কোনও একটিটি মিস করেন তবে এটি ক্র্যাশ হবে। প্রকৃতপক্ষে আমি ললিপপ দ্বারা ব্যবহৃত শেষটিটি মিস করেছিলাম যা নির্মাণকারী যুক্ত করেছিলেন এবং সূক্ষ্মভাবে কাজ করেছিলেন।


2

আমাদের অবশ্যই build.gradle (অ্যাপ) এ নিম্নলিখিতগুলি যুক্ত করতে হবে

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

যখনই আমরা নতুন লেআউট বা নতুন ডিজাইন বৈশিষ্ট্য ব্যবহার করছি। আশা করি এটি আপনাকে সাহায্য করবে


2

আগের পোস্টে উল্লিখিত হিসাবে,
নাম পরিবর্তন করুন

android:name="com.fragment.NavigationDrawerFragment"

প্রতি

class = "com.fragment.NavigationDrawerFragment"

তবুও, এটি আমার পক্ষে কার্যকর হয়নি। আমি তখনই ক্লাসের নামটি কম.ফ্রেগমেন্ট অংশ ছাড়াই ব্যবহার করেছি এবং ভয়েলা এটি কাজ করেছে। সুতরাং অবশেষে এটি পরিবর্তন করুন

class = "NavigationDrawerFragment"

2

এখানে কোনও উত্তর আমাকে সহায়তা না করার পরে, আমি আমার খণ্ডে অনক্রিটভিউয়ের প্রতিটি লাইনে (আপনার ক্ষেত্রে নেভিগেশনড্রেভারফ্র্যাগমেন্ট) ডাবল মোডে অ্যাপ্লিকেশন চালানোর পছন্দ করেছিলাম। এবং লক্ষ্য করেছেন যে নালপয়েন্টার এক্সসেপশনের কারণে টুকরাটি ফুলে উঠতে সমস্যা হচ্ছিল। যেমন

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

এখানে মাইসেকবারটি নালায় সেট করা হয়েছিল (কারণ আমি উপযুক্ত লেআউটে নিয়ন্ত্রণ যুক্ত করতে মিস করেছি) এবং পরের লাইনটি এনপিইতে প্রবেশ করেছিল যা ইনফলেটএক্সসেপশন হিসাবে প্রকাশিত হয়েছিল। এছাড়াও উপরে বর্ণিত হিসাবে, Android এর নাম পরিবর্তন করুন: শ্রেণিতে নাম to

উপরে উল্লিখিত বিভিন্ন কারণে এই সমস্যাটি উঠতে পারে। আমি কী ভুল তা জানতে লাইন বাই লাইন ডিবাগ প্রবাহের পরামর্শ দেব।


এবং এই ত্রুটিটি কোনও খণ্ডের onCreateView()পদ্ধতিতে ঘটছে ?
LarsH

1

আপনারা কারও কারও জন্য এখনও এটির সমাধান খুঁজে পাওয়া যায় নি, আমার ক্ষেত্রে এটি ঘটছিল কারণ আমার একটি OOM (মেমরির বাইরে) সমস্যা ছিল। এটি হতে পারে যখন আপনার অ্যাপ্লিকেশনটিতে দীর্ঘ সময়ের জন্য ব্যবহার করার সময় একটি মেমরি ফাঁস হয়। আমার স্ট্যাক ট্রেসের মধ্যে এটিই মূল কারণ ছিল।


1

আমি জানি না এটি সাহায্য করবে কিনা।

আমি যে লেআউটটিতে স্ফীত করার চেষ্টা করছিলাম তাতে টেক্সটভিউ নিয়ে আমার এই সমস্যা ছিল (অ্যান্ড্রয়েড.ভিউ.ইনফ্লেট এক্সেপশন: বাইনারি এক্সএমএল ফাইল লাইন # 45: ক্লাস টেক্সটভিউতে স্ফীতকরণে ত্রুটি )।

আমি নিম্নলিখিত XML অ্যাট্রিবিউটটি অ্যান্ড্রয়েড সেট করে রেখেছি: টেক্সট সাইজ = "? অ্যান্ড্রয়েড: অ্যাটর / টেক্সট অ্যাপিয়ারেন্স লার্জ" যা লেআউটটি স্ফীত হতে দেয় না।

ঠিক কীভাবে জানেন না, ( আমি এখনও অ্যান্ড্রয়েডে কিছুটা নতুন - অভিজ্ঞতার এক বছরেরও কম ), কলিং সিস্টেমের বৈশিষ্ট্যগুলি, আইডিকির সাথে কিছু করার থাকতে পারে, আমি যতটা জানি যত তাড়াতাড়ি আমি সরল পুরানো @ ব্যবহার করেছি মাত্রা / md_text_16sp ( যা আমার একটি প্রথা ), সমস্যা সমাধান হয়েছে :)

আশাকরি এটা সাহায্য করবে...


আমার কোনও টুকরো ছিল না বা টেক্সট সাইজ অ্যান্ড্রয়েড অ্যাট্রিবিউট ছিল না। আমার ত্রুটি একটি কাস্টম শৈলী TextAppearance.AppCompat inheriting পরিবর্তে সঙ্গে একটি TextInputLayout সম্পর্কিত ছিল Widget.Design.TextInputLayoutstackoverflow.com/questions/19874882/…
জুনিয়র মেহে

1

আমি এটি একটি 4.4.2 ডিভাইসে রেখেছি, তবে 5+ ভাল ছিল fine কারণ: একটি কাস্টম ভিউয়ের আরম্ভের ভিতরে, আমি একটি তৈরি করছিলাম TextView(Context context, AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes), যা API 21+।

অ্যান্ড্রয়েড স্টুডিও ২.১ এ মন্তব্য করা হলেও এটি সম্পর্কে অভিযোগ করে না TargetApi(21)। স্পষ্টতই, অ্যান্ড্রয়েড স্টুডিও ২.২ এটিকে সংশোধন করবে এবং এটিকে ত্রুটি হিসাবে যথাযথভাবে প্রদর্শন করবে।

আশা করি এটি কাউকে সাহায্য করবে।


1

আমি পার্টিতে কিছুটা দেরি করে ফেলেছি তবে এই উত্তরগুলির উত্তর আমার ক্ষেত্রে আমাকে সহায়তা করেছিল helped আমি গুগল ম্যাপটি আমার খণ্ডে সাপোর্টম্যাপফ্র্যাগমেন্ট এবং প্লেসআউটোকম্পলফ্র্যাগমেন্ট হিসাবে ব্যবহার করছিলাম । সমস্ত উত্তর যেহেতু এই সমস্যাটির দিকে ইঙ্গিত করেছে যে সাপোর্টম্যাপফ্র্যাগমেন্টটি মানচিত্রটিকে পুনরায় তৈরি এবং পুনরায় চিত্রিত করার ক্ষেত্রে রয়েছে।

তবে আমারও প্লেসআউটোকম্পিউলিট ফ্রেগমেন্টে সমস্যা ছিল। সুতরাং সাপোর্টম্যাপফ্র্যাগমেন্ট এবং সাপোর্টম্যাপফ্র্যাগমেন্টের কারণে যারা এই সমস্যার মুখোমুখি হচ্ছেন তাদের কার্যকারী সমাধান এখানে

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

    }

এবং অনডেট্রয়েভিউতে সাপোর্টম্যাপফ্র্যাগমেন্ট এবং সাপোর্টম্যাপফ্রেগমেন্ট সাফ করুন

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


}

1

দীর্ঘ সময় চেষ্টা করার পরেও উপরের উত্তরগুলির কোনও উত্তর না পাবার পরে আমি সমস্যার সমাধান করেছি।

  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 Activityবদলে আমার সমস্ত ক্লাস AppCompatActivity

আমি প্রজেক্টটি প্রসারিত করার জন্য পুনরায় ফ্যাক্টর করেছি AppCompatActivity, তারপরে রাইট-ক্লিক করুন Layout Folder, new-> Activityতারপরে Navigation Drawer Activityএবং বুমে ক্লিক করুন , আমার জন্য সবকিছুই শেষ হয়েছে!


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

ভিউটি যে কোনও কিছু হতে পারে যা স্ফীত হওয়াতে ব্যর্থ হচ্ছে, এক্সএমএল ফাইলটিতে উল্লিখিত কোনও দর্শনের শ্রেণি নাম বা নাম বৈশিষ্ট্য সমাধান করার ক্ষেত্রে সংঘাত চললে এই ধরণের ত্রুটি ঘটে।

আমি যখন একই ত্রুটি পাই তখন আমি সবেমাত্র ইউআই-এক্সএমএল ফাইলে সবকিছু পরিষ্কার এবং নিরাপদ পেয়েছিলাম, আমি যে ভিউটি ব্যবহার করছিলাম,

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

আমি একটি স্টাইল বৈশিষ্ট্য ব্যবহার করছিলাম যা উপাদান উপাদানগুলির সম্পত্তি উল্লেখ করছিল। তবে আমার স্টাইল.এক্সএমএল ...

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

যেখানে সমাধান করা শ্রেণি দ্বন্দ্বের মুখোমুখি হয়েছিল। আমার দেখার বৈশিষ্ট্যগুলি এমন একটি সম্পত্তি উল্লেখ করেছে যা আমার অ্যাপ্লিকেশন থিমে সংজ্ঞায়িত হয়নি। উপাদান উপাদানগুলি থেকে সঠিক পিতামাতার থিমটি আমাকে সহায়তা করেছে। তাই আমি ...

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

যা বিষয়টি সমাধান করেছে।


0

আমি মনে করি মূল সমস্যাটি "অ্যান্ড্রয়েড: টার্গেটএসডিপি ভার্সন" যা অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে সংজ্ঞায়িত হয়েছে with আমার ক্ষেত্রে, প্রাথমিক মান যা আমি সংজ্ঞায়িত করেছি:

android:targetSdkVersion=16

আমি এটিকে পরিবর্তন করেছি:

android:targetSdkVersion=22

যা আমার সমস্ত ত্রুটি সমাধান করেছে। সুতরাং, অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করার আগে সঠিক "টার্গেটএসডকভিশন" সেটআপ করাও গুরুত্বপূর্ণ।


0

যদি অন্য কেউ এখানে আসে এবং উত্তরগুলি সমস্যার সমাধান করতে সহায়তা না করে, তবে আরও একটি জিনিস চেষ্টা করার দরকার।

অন্যরা যেমন উল্লেখ করেছে, এটি সাধারণত আপনার জাভাতে কোনও ভুল কাজ করার বিপরীতে XML নিজেই নেস্টেড ইস্যু দ্বারা সৃষ্ট হয়। আমার ক্ষেত্রে এটি সংশোধন করা খুব সহজ (এবং বোকা) ভুল ছিল।

আমার এইরকম কোড ছিল:

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

যখন আমাকে যা করতে হয়েছিল তা হ'ল ভিউতে মূলধন করা যাতে সিস্টেমটি এটি পুনরায় চালু করে। আপনার কাস্টম ভিউগুলি (বা টুকরো টুকরো, পুনর্ব্যবহারযোগ্য ইত্যাদি) সবার সামনে যথাযথ মূলধন সংক্রান্ত ঘোষণা রয়েছে যাতে এক্সএমএল স্বয়ংক্রিয় সম্পূর্ণ এটির সাথে উপযুক্ত দৃশ্যের সাথে মেলে।


0

আমার এই ত্রুটিটিও ছিল, এবং খুব দীর্ঘ ডিবাগিংয়ের পরে সমস্যাটি দেখা গেল যে আমার মেইন ক্লাস ফ্রেমঅ্যাক্টিভিটির পরিবর্তে ক্রিয়াকলাপ বাড়িয়ে দিয়েছে, আমার ক্ষেত্রে, এক্সএমএল কোনও সমস্যা ছিল না। আপনাকে সাহায্য আশা করি।


0

আমার ক্ষেত্রে .

আমি যে লেআউটটি ফুলিয়ে দেওয়ার চেষ্টা করছিলাম সেটি ছিল

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

ট্যাগ, অপসারণ এটি স্থির করে।

আমি ভিউ-পেজার অ্যাডাপ্টারে একটি অ্যাকটিভিটির জন্য নকশা করা পূর্ববর্তী লেআউটটি স্ফীত করার চেষ্টা করছিলাম।


0

আমার ত্রুটিটি অন্যরকম সমস্যার কারণে হয়েছিল।

আমি একটি ক্রিয়াকলাপ থেকে এর খণ্ডে একটি বান্ডিল দিয়ে যাচ্ছিলাম। আমি টুকরাটিতে বান্ডিল গ্রহণ কোডটি মন্তব্য করার সময় ত্রুটি চলে গেছে। দেখা যাচ্ছে যে, আমার ত্রুটি নীচে "getArguments ()" এর কারণে হয়েছিল নাল ফিরে ছিল যা অংশ।

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

আমি জানি না কেন এটি সঠিকভাবে এনপিইর পরিবর্তে এই ত্রুটিটি ছুঁড়েছে, তবে কারওর মতো পরিস্থিতি দেখা দিলে এটি আমার ত্রুটিটি সমাধান করেছে this


0

আমার একই সমস্যা ছিল, আমার ক্ষেত্রে প্যাকেজের নামটি ভুল ছিল, এটি সমাধান করা সমস্যার সমাধান করেছে।


0

গ্রেড.প্রোপার্টি খুলুন এবং নিম্নলিখিত লাইনটি যুক্ত করুন:

android.enableAapt2=false

তথ্যসূত্র: https://github.com/chrisjenx/Calligraphy/issues/417#issuecomment-365177808


অ্যান্ড্রয়েড একটি সতর্কতা দেয় যে android.enableAapt2 হ্রাস করা হয়।
বিভূতি

0

আমার ফ্রেগমেন্ট.এক্সএমএল এর মূলে আমার রিসাইক্লারভিউ ছিলাম তখন আমার এই ত্রুটি হয়েছিল,

কিন্তু যখন আমি এটিকে ভিউগ্রুপ দিয়ে মুড়ে ফেলেছি, অ্যাপটি ঠিকঠাক কাজ করেছে।


0

নেভিগেশনে এই নাম ক্ষেত্রটি যুক্ত করুন

অ্যান্ড্রয়েড নামটি = "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">
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.