1

Trying to move app made in (appcompat v20) to the new library appcompat v21

with: appcompat-v7:20 work nice

I did this:

ActionBarActivity implements ActionBar.TabListener, ActionBar.OnNavigationListener

and have this:

android.view.InflateException: Binary XML file line #17: Error inflating class android.support.v7.internal.widget.ActionBarOverlayLayout

Error inflating class android.support.v7.internal.widget.ActionBarView

Community
  • 1
  • 1
Kamil Nękanowicz
  • 6,254
  • 7
  • 34
  • 51

3 Answers3

11

In order to use the new appcompat v21 you have to:

  • extend the ActionBarActivity instead of FragmentActivity
  • use getSupportActionBar() instead of getActionBar()
  • use a theme which inherits from Theme.AppCompat.(for example Light or NoActionBar)

EDIT: 23/04/2015

With the new appcompat v22.1 you should use the new AppCompatActivity instead of the ActionBarActivity

Also, ActionBar.TabListener, ActionBar.OnNavigationListener: Action bar navigation modes are deprecated and not supported by inline toolbar action bars. Consider using other common navigation patterns instead.

Source doc: https://developer.android.com/reference/android/support/v7/app/ActionBar.html#addTab(android.support.v7.app.ActionBar.Tab)

Gabriele Mariotti
  • 320,139
  • 94
  • 887
  • 841
6

The problem was much deeper than it seems.

My code was correct. All the advice in the subject relevant and correct.

It turned out that external libraries contain old versions support-v4, which does not support MATERIAL DESIGN(appcompat-v7:21) but only appcompat-v7:20

It was the reason for ActionBar() InflateException error-inflating-class.

Update support-v4 in all external libraries will solve the problem.

My build.gradle in other topic:

multiple dex files define Landroid/support/v4/.

Community
  • 1
  • 1
Kamil Nękanowicz
  • 6,254
  • 7
  • 34
  • 51
4

this is working code...copmactv7_api5 using...another steps are same

    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.ActionBar;
    import android.support.v7.app.ActionBar.Tab;
    import android.support.v7.app.ActionBarActivity;

public class MainActivity extends ActionBarActivity implements
        ActionBar.TabListener {

AppSectionsPagerAdapter mAppSectionsPagerAdapter;
ViewPager mViewPager;

@SuppressWarnings("deprecation")
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.admin_main_tab);

    // Create the adapter that will return a fragment for each of the three
    // primary sections
    // of the app.
    mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(
            getSupportFragmentManager());

    // Set up the action bar.
    final ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Set up the ViewPager, attaching the adapter and setting up a listener
    // for when the
    // user swipes between sections.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mAppSectionsPagerAdapter);
    mViewPager
            .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    // When swiping between different app sections, select
                    // the corresponding tab.
                    // We can also use ActionBar.Tab#select() to do this if
                    // we have a reference to the
                    // Tab.
                    actionBar.setSelectedNavigationItem(position);
                }
            });

    // For each of the sections in the app, add a tab to the action bar.
    for (int i = 0; i < mAppSectionsPagerAdapter.getCount(); i++) {
        // Create a tab with text corresponding to the page title defined by
        // the adapter.
        // Also specify this Activity object, which implements the
        // TabListener interface, as the
        // listener for when this tab is selected.
        actionBar.addTab(actionBar.newTab()
                .setText(mAppSectionsPagerAdapter.getPageTitle(i))
                .setTabListener(this));
    }
}

/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the primary sections of the app.
 */
public static class AppSectionsPagerAdapter extends FragmentPagerAdapter {

    public AppSectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i) {
        case 0:
            return new AdminSettings();
        default:
            Fragment fragment = new AdminSettings();
            return fragment;
        }
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "Section " + (position + 1);
    }
}

@Override
public void onTabReselected(Tab arg0,
        android.support.v4.app.FragmentTransaction arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onTabSelected(Tab tab,
        android.support.v4.app.FragmentTransaction arg1) {
    mViewPager.setCurrentItem(tab.getPosition());

}

    @Override
    public void onTabUnselected(Tab arg0,
            android.support.v4.app.FragmentTransaction arg1) {
        // TODO Auto-generated method stub

    }

}
Vivek Shah
  • 380
  • 2
  • 8