4

我在这个问题显得但是,它并没有帮助解决我的问题:资源不能被发现,没有标识丢失的物品

我使用ActionBarSherlock(4.4版)在我的应用程序中用于旧版本的兼容性。我的应用在4.1.2上完美运行,但在2.3.3上崩溃。该应用程序一直运行到mDrawerLayout.closeDrawer(mDrawerList);点,然后崩溃。我无法弄清楚是什么导致它在旧版本上崩溃。我有一种感觉,那就是因为它试图使用那个版本中不存在的东西,但是我无法确定它使用的是什么。有没有人看到任何看起来不对的代码?

在logcat的错误: Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x10102fd a=-1}

logcat的错误

08-15 21:01:04.967: E/AndroidRuntime(789): FATAL EXCEPTION: main 
08-15 21:01:04.967: E/AndroidRuntime(789): android.view.InflateException: Binary XML file line #17: Error inflating class <unknown> 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
08-15 21:01:04.967: E/AndroidRuntime(789): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.LayoutInflater.inflate(LayoutInflater.java:386) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:332) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.AbsListView.obtainView(AbsListView.java:1430) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.ListView.makeAndAddView(ListView.java:1745) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.ListView.fillDown(ListView.java:670) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.ListView.fillFromTop(ListView.java:727) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.ListView.layoutChildren(ListView.java:1598) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.AbsListView.onLayout(AbsListView.java:1260) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.View.layout(View.java:7175) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:702) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.View.layout(View.java:7175) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.View.layout(View.java:7175) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.View.layout(View.java:7175) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.View.layout(View.java:7175) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.View.layout(View.java:7175) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.os.Looper.loop(Looper.java:123) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-15 21:01:04.967: E/AndroidRuntime(789): at java.lang.reflect.Method.invokeNative(Native Method) 
08-15 21:01:04.967: E/AndroidRuntime(789): at java.lang.reflect.Method.invoke(Method.java:507) 
08-15 21:01:04.967: E/AndroidRuntime(789): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-15 21:01:04.967: E/AndroidRuntime(789): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-15 21:01:04.967: E/AndroidRuntime(789): at dalvik.system.NativeStart.main(Native Method) 
08-15 21:01:04.967: E/AndroidRuntime(789): Caused by: java.lang.reflect.InvocationTargetException 
08-15 21:01:04.967: E/AndroidRuntime(789): at java.lang.reflect.Constructor.constructNative(Native Method) 
08-15 21:01:04.967: E/AndroidRuntime(789): at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
08-15 21:01:04.967: E/AndroidRuntime(789): ... 35 more 
08-15 21:01:04.967: E/AndroidRuntime(789): Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x10102fd a=-1} 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.content.res.Resources.loadDrawable(Resources.java:1681) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.view.View.<init>(View.java:1951) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.TextView.<init>(TextView.java:344) 
08-15 21:01:04.967: E/AndroidRuntime(789): at android.widget.TextView.<init>(TextView.java:337) 
08-15 21:01:04.967: E/AndroidRuntime(789): ... 38 more 

从值文件夹styles.xml:

<resources> 
    <style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar"> 
    </style> 

    <style name="AppTheme" parent="AppBaseTheme"> 
    </style> 
</resources> 

的Java文件

protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     setTheme(R.style.Theme_Sherlock); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.d(TAG,"Set Content View"); 

     mTitle = (String) getTitle(); 
     ChemTitles = getResources().getStringArray(R.array.chemistrycalcstrings); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 

     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
     mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
       R.layout.drawer_list_item, ChemTitles)); 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     Log.d(TAG,"Set Display Home"); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     Log.d(TAG,"Set Home Button"); 
     Log.d(TAG,"Setting ActbarDrawerToggle"); 
     mDrawerToggle = new ActionBarDrawerToggle(
       this, 
       mDrawerLayout, 
       R.drawable.ic_drawer, 
       R.string.drawer_open, 
       R.string.drawer_close 
       ) { 
      public void onDrawerClosed(View view){ 
       getSupportActionBar().setTitle(mTitle); 
       getSherlock().dispatchInvalidateOptionsMenu(); 
       Log.d(TAG,"Drawer CLosing"); 
      } 

      public void onDrawerOpened(View drawerView){ 
       getSupportActionBar().setTitle(mDrawerTitle); 
       getSherlock().dispatchInvalidateOptionsMenu(); 
       Log.d(TAG,"Drawer Opening"); 
      } 
     }; 
     Log.d(TAG,"Set ActbarDrawerToggle"); 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 
     Log.d(TAG,"Set ActbarDrawerToggle Listener"); 

     if (savedInstanceState == null){ 
      selectItem(0); 
     } 
} 

private void selectItem(int position){ 

    SherlockFragment frag = new TestFrament(); 
    Bundle args = new Bundle(); 
    args.putInt(TestFrament.ITEM_SEL, position); 
    frag.setArguments(args); 
    getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, frag).commit(); 
    mDrawerList.setItemChecked(position, true); 
    setTitle(ChemTitles[position]); 
    mDrawerLayout.closeDrawer(mDrawerList); 
} 

编辑/ UPDATE

我经历了和注释掉所有涉及到的列表视图mDrawerList和应用发射权了一个工作动作条在抽屉里只是没有列表视图部分。

布局activity_main.xml中

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

    <!-- As the main content view, the view below consumes the entire 
     space available using match_parent in both dimensions. --> 
    <LinearLayout 
     android:id="@+id/content_frame" 
     android:orientation="horizontal" 
     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. 
     The drawer is given a fixed width in dp and extends the full height of 
     the container. A solid background is used for contrast 
     with the content view. --> 
    <ListView 
     android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 
</android.support.v4.widget.DrawerLayout> 

drawer_list_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:textColor="#fff" 
    android:background="?android:attr/activatedBackgroundIndicator" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall"/> 

test_fragment_layout.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragTextSherlock" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFF" 
    android:gravity="center" 
    android:padding="32dp" /> 

TestFragment.java

public class TestFrament extends SherlockFragment { 
    public static final String ITEM_SEL = "item_selected"; 
    private TextView fragtv; 

    public TestFrament() { 
     // Empty constructor required for fragment subclasses 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.test_fragment_layout, container, false); 
     int i = getArguments().getInt(ITEM_SEL); 
     fragtv = (TextView) rootView.findViewById(R.id.fragTextSherlock); 
     fragtv.setText(String.valueOf(i)); 
     return rootView; 
    } 
} 
+0

您是否能够在不碰撞的情况下打开和关闭抽屉? (没有选择一个项目) – adefran83

+0

当关闭抽屉时增加一个全局变量来保存抽屉的位置,所以你的'DrawerItemClickListener'只有'currentPosition = position',然后'mDrawerLayout.closeDrawer(mDrawerView); “然后添加'selectItem(currentPosition);'到您的抽屉关闭,也删除'mDrawerLayout.closeDrawer(mDrawerList);'从选择的项目。我还建议添加一些代码来检查选定的项目是否与以前的位置相同以减少资源使用量 – adefran83

+0

如果列表视图不存在于代码中,我可以打开和关闭抽屉。如果listview在代码中,那么应用程序在listview.layoutchildren()(android源代码的一部分)上崩溃。所以它崩溃之前,我可以做任何事情 – ObieMD5

回答

5

的问题是,我用所没有的compatiabiliy的部分项目,并在2.3.3

看那系暂无数据,我不得不删除编译器没有告诉我:

drawer_list_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" <-Removed 
    android:gravity="center_vertical" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:textColor="#fff" 
    android:background="?android:attr/activatedBackgroundIndicator" <-Removed 
    android:minHeight="?android:attr/listPreferredItemHeightSmall"/> <-Removed 
+0

这是有道理的,我使用操作栏/导航抽屉组合,但由于我的应用程序需要4.0.4+我不必担心兼容性 – adefran83

+0

谢谢!在2.3.7上移除'android:background =“?android:attr/activatedBackgroundIndicator”'就足以让应用程序工作。 – surlac

5

支持,而不是删除以下三个参数较低的版本,

android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:background="?android:attr/activatedBackgroundIndicator" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" 

你实际上可以用替换它们具有相同的值/资源。

等效值可从 https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/themes.xml

现在来获得,

1

这是经常发生因res文件夹的可绘制资源的不可用。有时候您只需将其他目录中的drawable复制到项目的可绘制文件夹中,但忘记从IDE的项目浏览器中添加该drawable。

相关问题