0

나는이 문제에 대해 지금 며칠 동안 곤란을 겪었고 내 머리를 잃어 버렸다. 나는 온라인으로 질문의 페이지에 페이지를 훑어 보았고 어떤 도움을 얻기를 희망하는 대답을 찾지 못했다! 내비게이션 서랍이있는 주요 활동이있는 Android 4.0 앱이 있습니다. 제대로 작동합니다. 선택한 메뉴 항목에 따라 Fragment 또는 ListFragment가로드됩니다. 다시 이것은 잘 작동합니다.바이너리 XML 파일 라인 # 18 : 클래스를 부 풀리는 중 오류 발생 - Gingerbread with ActionbarSherlock에서만

이제 ActionbarSherlock을 사용하여 진저 브레드에 대한 지원을 제공하려고합니다. ABS 라이브러리를 사용하기 위해 주요 활동과 코드를 업데이트했지만 현재 버전 2.3 에뮬레이터에서만 오류가 발생합니다! 업데이트 된 코드는 4.0 이상에서도 정상적으로 작동합니다!

어쩌면 나는이 너무 오래 쳐다 봤는데 내 activity_main.xml에 오류 팽창 클래스 있지만 ICS 작동 이유를 이해할 수 없다 : 바이너리 XML 파일 라인 # 18 :

는 나는 다음과 같은 오류가 발생합니다 그리고 진저 브레드는 아니지만! 아무도 내가 여기에서 놓친 것을 아는가? 여기

내 코드입니다 :

activity_main.xml :

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

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

    <ListView 
     android:id="@+id/list_slidermenu" 
     android:layout_width="280dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="left" 
     android:background="@color/list_background" 
     android:choiceMode="singleChoice" 
     android:divider="@color/list_divider" 
     android:dividerHeight="1dp" 
     android:listSelector="@drawable/list_selector" /> 

</android.support.v4.widget.DrawerLayout> 

strings.xml의 조각 :

import com.actionbarsherlock.app.SherlockFragment; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 
import com.actionbarsherlock.app.SherlockListFragment; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 

public class MainActivity extends SherlockFragmentActivity { 
    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private ActionBarDrawerToggle mDrawerToggle; 

    // nav drawer title 
    private CharSequence mDrawerTitle; 

    // used to store app title 
    private CharSequence mTitle; 

    // slide menu items 
    private String[] navMenuTitles; 
    private TypedArray navMenuIcons; 

    private ArrayList<NavDrawerItem> navDrawerItems; 
    private NavDrawerListAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTitle = mDrawerTitle = getTitle(); 

     // load slide menu items 
     navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); 

     // nav drawer icons from resources 
     navMenuIcons = getResources() 
       .obtainTypedArray(R.array.nav_drawer_icons); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.list_slidermenu); 

     navDrawerItems = new ArrayList<NavDrawerItem>(); 

     // adding nav drawer items to array 
     // Fragment 1 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons 
       .getResourceId(0, -1))); 
     // Fragment 2 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons 
       .getResourceId(1, -1))); 
     // Fragment 3 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons 
       .getResourceId(2, -1))); 
     // Fragment 4 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons 
       .getResourceId(3, -1))); 


     // Recycle the typed array 
     navMenuIcons.recycle(); 

     mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); 

     // setting the nav drawer list adapter 
     adapter = new NavDrawerListAdapter(getApplicationContext(), 
       navDrawerItems); 
     mDrawerList.setAdapter(adapter); 

     // enabling action bar app icon and behaving it as toggle button 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.ic_drawer, // nav menu toggle icon 
       R.string.app_name, // nav drawer open - description for 
            // accessibility 
       R.string.app_name // nav drawer close - description for 
            // accessibility 
     ) { 
      public void onDrawerClosed(View view) { 
       getSupportActionBar().setTitle(mTitle); 
       // calling onPrepareOptionsMenu() to show action bar icons 
       invalidateOptionsMenu(); 
      } 

      public void onDrawerOpened(View drawerView) { 
       getSupportActionBar().setTitle(mDrawerTitle); 
       // calling onPrepareOptionsMenu() to hide action bar icons 
       invalidateOptionsMenu(); 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     if (savedInstanceState == null) { 
      // on first time display view for item list 
      // displayView(startingFragment); 
      displayView(startingFragment); 
     } 
    } 

    private class SlideMenuClickListener implements 
      ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      // display view for selected nav drawer item 
      displayView(position); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 

      if (mDrawerLayout.isDrawerOpen(mDrawerList)) { 
       mDrawerLayout.closeDrawer(mDrawerList); 
      } else { 
       mDrawerLayout.openDrawer(mDrawerList); 
      } 
      break; 
     default: 
      break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      finish(); 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     // if nav drawer is opened, hide the action items 
     boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 

     for (int i = 0; i < menu.size(); i++) { 
      menu.getItem(i).setVisible(!drawerOpen); 
     } 
     return super.onPrepareOptionsMenu(menu); 
    } 

    private void displayView(int position) { 
     Intent intent; 
     // update the main content by replacing fragments 
     SherlockFragment fragment = null; 
     SherlockListFragment listFragment = null; 
     Bundle bundle = null; 
     switch (position) { 
     case 0: // Fragment 1 
      listFragment = new Fragment1(); 
      break; 
     case 1: // Fragment 2 
      listFragment = new Fragment2(); 
      break; 
     case 2: // Fragment 3 
      listFragment = new Fragment3(); 
      break; 
     case 3: // Fragment 4 
      fragment = new Fragment4(); 
      break; 
     default: 
      break; 
     } 

     if ((fragment != null) || (listFragment != null)) { 
      if (fragment != null) { 
       FragmentManager fragmentManager = getSupportFragmentManager(); 
       fragmentManager.beginTransaction() 
         .replace(R.id.frame_container, fragment).commit(); 
      } else if (listFragment != null) { 
       FragmentManager fragmentManager = getSupportFragmentManager(); 
       fragmentManager.beginTransaction() 
         .replace(R.id.frame_container, listFragment).commit(); 
      } 

      // update selected item and title, then close the drawer 
      mDrawerList.setItemChecked(position, true); 
      mDrawerList.setSelection(position); 
      mDrawerLayout.closeDrawer(mDrawerList); 
     } else { 
      // error in creating fragment 
     } 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     // Sync the toggle state after onRestoreInstanceState has occurred. 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     // Pass any configuration change to the drawer toggls 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 
} 

: 여기

<!-- Nav Drawer Menu Items --> 
<string-array name="nav_drawer_items"> 
    <item>Frag 1</item> 
    <item>Frag 2</item> 
    <item>Frag 3</item> 
    <item>Frag 4</item> 
</string-array> 

<!-- Nav Drawer List Item Icons --> 
<!-- Keep them in order as the titles are in --> 
<array name="nav_drawer_icons"> 
    <item>@drawable/ic_nav_drawer_frag1</item> 
    <item>@drawable/ic_nav_drawer_frag2</item> 
    <item>@drawable/ic_nav_drawer_frag3</item> 
    <item>@drawable/ic_nav_drawer_frag4</item> 
</array> 

내 MainActivity.java입니다 또한 매니지먼트를 업데이트했습니다. 동부 표준시가 안드로이드를 사용하는 :의 minSdkVersion = "8"및 안드로이드 : 테마 = "@ 스타일/Theme.Sherlock.Light.DarkActionBar"

스택 추적 : 나는이 할 수 아니에요

04-26 19:18:26.092: E/AndroidRuntime(446): FATAL EXCEPTION: main  
04-26 19:18:26.092: E/AndroidRuntime(446): android.view.InflateException: Binary XML file line #18: Error inflating class <unknown> 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
04-26 19:18:26.092: E/AndroidRuntime(446): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
04-26 19:18:26.092: E/AndroidRuntime(446): at ca.brainservice.pricecruncher.free.util.NavDrawerListAdapter.getView(NavDrawerListAdapter.java:47) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.AbsListView.obtainView(AbsListView.java:1430) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.ListView.makeAndAddView(ListView.java:1745) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.ListView.fillSpecific(ListView.java:1290) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.ListView.layoutChildren(ListView.java:1588) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.AbsListView.onLayout(AbsListView.java:1260) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.View.layout(View.java:7175) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:714) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.View.layout(View.java:7175) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.View.layout(View.java:7175) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.View.layout(View.java:7175) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.View.layout(View.java:7175) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.View.layout(View.java:7175) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.os.Looper.loop(Looper.java:123) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-26 19:18:26.092: E/AndroidRuntime(446): at java.lang.reflect.Method.invokeNative(Native Method) 
04-26 19:18:26.092: E/AndroidRuntime(446): at java.lang.reflect.Method.invoke(Method.java:507) 
04-26 19:18:26.092: E/AndroidRuntime(446): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-26 19:18:26.092: E/AndroidRuntime(446): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-26 19:18:26.092: E/AndroidRuntime(446): at dalvik.system.NativeStart.main(Native Method) 
04-26 19:18:26.092: E/AndroidRuntime(446): Caused by: java.lang.reflect.InvocationTargetException 
04-26 19:18:26.092: E/AndroidRuntime(446): at java.lang.reflect.Constructor.constructNative(Native Method) 
04-26 19:18:26.092: E/AndroidRuntime(446): at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
04-26 19:18:26.092: E/AndroidRuntime(446): ... 35 more 
04-26 19:18:26.092: E/AndroidRuntime(446): Caused by: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x2 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:463) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.view.View.<init>(View.java:2108) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.TextView.<init>(TextView.java:344) 
04-26 19:18:26.092: E/AndroidRuntime(446): at android.widget.TextView.<init>(TextView.java:337) 
04-26 19:18:26.092: E/AndroidRuntime(446): ... 38 more 
+0

이 문제가 해결 되었습니까 ??? 같은 오류가 발생합니다. –

답변

0

아직 코멘트하기 하지만 supportInvalidateOptionsMenu() 대신 invalidateOptionsMenu()을 사용하고있는 것으로 나타났습니다. 아직이 문제가 해결 될지 잘 모르겠지만 잘못 보입니다.

+0

고마워요. 고칠 수 있었지만 아무 것도하지 않았습니다 ... – goodnoodle