Search code examples
androidandroid-layoutandroid-fragmentsandroid-activity

Can't solve " Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #11: Error inflating class fragment "


I am getting three Errors in my Code.

Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #11: Error inflating class fragment

Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment

Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.fyp.ui.home.HomeFragment: make sure class name exists

This is my logcat:

Process: com.example.fyp, PID: 1773
java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.example.fyp/com.example.fyp.MainActivity}: android.view.InflateException: Binary 
XML file line #12: Binary XML file line #11: Error inflating class fragment
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #11: Error 
inflating class fragment
    at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
    at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696)
    at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
    at com.example.fyp.MainActivity.onCreate(MainActivity.java:42)
    at android.app.Activity.performCreate(Activity.java:6237)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
 Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    at android.view.LayoutInflater.parseInclude(LayoutInflater.java:971)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:831)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    at android.view.LayoutInflater.parseInclude(LayoutInflater.java:971)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:831)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
    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:696) 
    at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170) 
    at com.example.fyp.MainActivity.onCreate(MainActivity.java:42) 
    at android.app.Activity.performCreate(Activity.java:6237) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment 
com.example.fyp.ui.home.HomeFragment: make sure class name exists
    at androidx.fragment.app.FragmentFactory.loadFragmentClass(FragmentFactory.java:91)
    at androidx.fragment.app.Fragment.instantiate(Fragment.java:546)
    at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
    at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
    at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132)
    at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162)
    at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58)
    at androidx.navigation.NavGraphNavigator.navigate(NavGraphNavigator.java:71)
    at androidx.navigation.NavGraphNavigator.navigate(NavGraphNavigator.java:28)
    at androidx.navigation.NavController.navigate(NavController.java:1036)
    at androidx.navigation.NavController.onGraphCreated(NavController.java:629)
    at androidx.navigation.NavController.setGraph(NavController.java:586)
    at androidx.navigation.NavController.setGraph(NavController.java:551)
    at androidx.navigation.NavController.setGraph(NavController.java:533)
    at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:238)
    at androidx.fragment.app.Fragment.performCreate(Fragment.java:2684)
    at android

This is my MainActivity.java:

package com.example.fyp;

import android.net.Uri;
import android.os.Bundle;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.core.view.GravityCompat;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.navigation.NavController;
import androidx.navigation.NavDestination;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.google.android.material.navigation.NavigationView;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity
{

private AppBarConfiguration mAppBarConfiguration;

private FrameLayout frameLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    ActionBar actionBar = getSupportActionBar();

    frameLayout = findViewById(R.id.main_frame_layout);

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);


    // Passing each menu ID as a set of Ids because each
    // menu should be considered as top level destinations.
    mAppBarConfiguration = new AppBarConfiguration.Builder(R.id.nav_my_mall,
            R.id.nav_my_orders, R.id.nav_my_rewards, R.id.nav_my_cart,
            R.id.nav_my_wishlist, R.id.nav_my_account, R.id.nav_sign_out)
            .setDrawerLayout(drawer)
            .build();

    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);

    navigationView.getMenu().getItem(0).setChecked(true);

    navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
        @Override
        public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination         
destination, @Nullable Bundle arguments) {
            if(destination.getId() == R.id.nav_my_mall) {

            }
            else if(destination.getId() == R.id.nav_my_orders) {

            }
            else if(destination.getId() == R.id.nav_my_rewards) {

            }
            else if(destination.getId() == R.id.nav_my_cart) {

            }
            else if(destination.getId() == R.id.nav_my_wishlist) {

            }
            else if(destination.getId() == R.id.nav_my_account) {

            }
            else if(destination.getId() == R.id.nav_sign_out) {

            }
        }
    });
    navigationView.setNavigationItemSelectedListener(new 
NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            int id  = item.getItemId();

            if (id == R.id.nav_my_mall)
            {
            }
            else if (id == R.id.nav_my_orders)
            {
            }
            else if (id == R.id.nav_my_rewards)
            {

            }
            else if (id == R.id.nav_my_cart)
            {

            }
            else if (id == R.id.nav_my_wishlist)
            {

            }
            else if (id == R.id.nav_my_account)
            {

            }
            else if (id == R.id.nav_sign_out)
            {

            }

            DrawerLayout drawer = findViewById(R.id.drawer_layout);
            drawer.closeDrawer(GravityCompat.START);
            return true;
        }
    });

    setFragment(new HomeFragment());

}

@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onSupportNavigateUp() {
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    return NavigationUI.navigateUp(navController, mAppBarConfiguration)
            || super.onSupportNavigateUp();
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    int id  = item.getItemId();

    if (id == R.id.main_search_icon)
    {
        return true;
    }
    else if (id == R.id.main_notification_icon)
    {
        return true;
    }
    else if (id == R.id.main_search_icon)
    {
        return true;
    }


    return super.onOptionsItemSelected(item);
}

private void setFragment(Fragment fragment) {
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    //.setCustomAnimations(R.anim.slide_from_right, R.anim.slideout_from_left);
    fragmentTransaction.replace(frameLayout.getId(), fragment);
    fragmentTransaction.commit();

}
}

This is activity_main.xml:

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

<include
    layout="@layout/app_bar_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />


<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:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

This is my HomeFragment.java:

package com.example.fyp;

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import static androidx.constraintlayout.widget.Constraints.TAG;

public class HomeFragment extends Fragment {

public HomeFragment() {
    // Required empty public constructor
}


private RecyclerView catagoryRecyclerView;
private CatagoryAdapter catagoryAdapter;

private ViewPager bannerSliderViewPager;
private List<SliderModel> sliderModelList;
private int currentPage = 2;
private Timer timer;
final private long DELEY_TIME = 3000;
final private long PERIOD_TIME = 3000;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
 
        View view = inflater.inflate(R.layout.fragment_home, container, false);
    catagoryRecyclerView = view.findViewById(R.id.catagory_recycler_view);

    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    catagoryRecyclerView.setLayoutManager(layoutManager);

    List<CatagoryModel> catagoryModelList = new ArrayList<CatagoryModel>();
    catagoryModelList.add(new CatagoryModel("link", "Home"));
    catagoryModelList.add(new CatagoryModel("link", "Electronics"));
    catagoryModelList.add(new CatagoryModel("link", "Appliances"));
    catagoryModelList.add(new CatagoryModel("link", "Furniture"));
    catagoryModelList.add(new CatagoryModel("link", "Fashion"));
    catagoryModelList.add(new CatagoryModel("link", "Toys"));
    catagoryModelList.add(new CatagoryModel("link", "Sports"));
    catagoryModelList.add(new CatagoryModel("link", "Wall Art"));
    catagoryModelList.add(new CatagoryModel("link", "Books"));
    catagoryModelList.add(new CatagoryModel("link", "Shoes"));

    catagoryAdapter = new CatagoryAdapter(catagoryModelList);
    catagoryRecyclerView.setAdapter(catagoryAdapter);
    catagoryAdapter.notifyDataSetChanged();

    bannerSliderViewPager = view.findViewById(R.id.banner_slider_view_pager);
    sliderModelList = new ArrayList<SliderModel>();

    sliderModelList.add(new SliderModel(R.drawable.banner4, "#FFFFFF"));
    sliderModelList.add(new SliderModel(R.drawable.banner5, "#FFFFFF"));
    sliderModelList.add(new SliderModel(R.drawable.banner1, "#FFFFFF"));

    sliderModelList.add(new SliderModel(R.drawable.banner2, "#FFFFFF"));
    sliderModelList.add(new SliderModel(R.drawable.banner3, "#FFFFFF"));
    sliderModelList.add(new SliderModel(R.drawable.banner4, "#FFFFFF"));

    sliderModelList.add(new SliderModel(R.drawable.banner5, "#FFFFFF"));
    sliderModelList.add(new SliderModel(R.drawable.banner1, "#FFFFFF"));
    sliderModelList.add(new SliderModel(R.drawable.banner2, "#FFFFFF"));


    SliderAdapter sliderAdapter = new SliderAdapter(sliderModelList);

    bannerSliderViewPager.setAdapter(sliderAdapter);

    bannerSliderViewPager.setClipToPadding(false);
    bannerSliderViewPager.setPageMargin(20);

   bannerSliderViewPager.setCurrentItem(currentPage);

    ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            currentPage = position;
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            if (state == ViewPager.SCROLL_STATE_IDLE)
            {
                pageLooper();
            }

        }
    };
    bannerSliderViewPager.addOnPageChangeListener(onPageChangeListener);

    startBannerSlideShow();

    bannerSliderViewPager.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            pageLooper();
            stopBannerSlideShow();

            if (event.getAction() == MotionEvent.ACTION_UP)
            {
                stopBannerSlideShow();
            }
            return false;
        }
    });

    return view;
}

private void pageLooper()
{
    if (currentPage == sliderModelList.size() - 2)
    {
        currentPage = 2;
        bannerSliderViewPager.setCurrentItem(currentPage, false);
    }

    if (currentPage == 1)
    {
        currentPage = sliderModelList.size() - 3;
        bannerSliderViewPager.setCurrentItem(currentPage, false);
    }
}

private void startBannerSlideShow()
{

    final Handler handler =new Handler(Looper.getMainLooper());
    final Runnable update = new Runnable() {
        @Override
        public void run() {
            if (currentPage >= sliderModelList.size())
            {
                currentPage = 1;
            }

            bannerSliderViewPager.setCurrentItem(currentPage++ , true);
        }
    };
    timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            handler.post(update);
        }
    }, DELEY_TIME, PERIOD_TIME);
}

private void stopBannerSlideShow()
{
    timer.cancel();
}
}

This is fragment_home.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
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=".HomeFragment">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/catagory_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorAccent"
    android:elevation="3dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/catagory_recycler_view">

    <include layout="@layout/sliding_ad_layout"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

This is AndroidManifest.xml:

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

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

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:hardwareAccelerated="false"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <meta-data android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main"
        android:hardwareAccelerated="true"
        android:theme="@style/AppTheme.NoActionBar"></activity>
    <activity
        android:name=".RegisterActivity"
        android:screenOrientation="portrait" />
    <activity
        android:name=".splashfile"
        android:screenOrientation="portrait" />
    <activity
        android:name=".SplashActivity"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

</manifest>

Please tell me how to fix errors.


Solution

  • your package name in HomeFragment is

    package com.example.fyp;
    

    and your lagcat says package name is

    com.example.fyp.ui.home.HomeFragment: make sure class name exists
    

    this might the reason for error

    Note - cannot comment because reputation < 50