Iappcompat v21: Material Design ActionBar () InflateException error-inflating-class

Attempting to move an application made in ( appcompat v20 ) to the new appcompat v21 library

c: appcompat-v7:20 works well

I have done this:

 ActionBarActivity implements ActionBar.TabListener, ActionBar.OnNavigationListener 

and do the following:

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

+1
source share
3 answers

The problem was much deeper than it seems.

My code was right. All tips on the topic are relevant and correct.

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

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

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

My build.gradle in another topic:

Several dex files define Landroid / support / v4 / .

+6
source

To use the new appcompat v21 , you need:

  • extend ActionBarActivity instead of FragmentActivity
  • use getSupportActionBar() instead of getActionBar()
  • use a theme that inherits from Theme.AppCompat. (e.g. Light or NoActionBar)

EDIT: 04/23/2015

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

In addition, ActionBar.TabListener, ActionBar.OnNavigationListener: the action bar navigation modes are outdated and are not supported by the built-in toolbar action panels. Instead, use other general navigation patterns.

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

+11
source

this is working code ... copmactv7_api5 using ... other steps are the 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 } } 
+4
source

Source: https://habr.com/ru/post/980387/


All Articles