不能自定义选择添加到ListView控件 [英] Can't add custom selector to ListView

查看:303
本文介绍了不能自定义选择添加到ListView控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我有一个 ListFragment 与具有自定义的CursorAdapter 传递到自定义视图自定义布局的ListView 。在的ListView 有自己的选择模式设置为 MultiChoiceModal 。然而,选择的项目不会被高亮,我是否选择在正常模式下一个项目或操作模式几种。为了解决这个问题,我尝试了选择。

 <?XML版本=1.0编码=UTF-8&GT?;
<选择的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>
    <项目的android:颜色=@机器人:彩色/ holo_blue_dark
        机器人:STATE_ pressed =真/>
    <项目的android:颜色=@机器人:彩色/ holo_blue_light
        机器人:state_checked =真/>
    <项目的android:颜色=@机器人:彩色/ holo_blue_bright
        机器人:state_selected =真/>
< /选择>

Hoowever,将这种在的ListView 作为列表的列表选择只是导致应用程序崩溃,但此错误当我尝试运行它:

  15 04-04:01:41.196:E / AndroidRuntime(849):致命异常:主要
04-04 15:01:41.196:E / AndroidRuntime(849):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.mowdowndevelopments.vault / com.mowdowndevelopments.vault.AccountListActivity}:android.view.InflateException:二进制XML文件行#9:错误充气类android.widget.ListView
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.os.Handler.dispatchMessage(Handler.java:99)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.os.Looper.loop(Looper.java:137)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.ActivityThread.main(ActivityThread.java:5041)
04-04 15:01:41.196:E / AndroidRuntime(849):在java.lang.reflect.Method.invokeNative(本机方法)
04-04 15:01:41.196:E / AndroidRuntime(849):在java.lang.reflect.Method.invoke(Method.java:511)
04-04 15:01:41.196:E / AndroidRuntime(849):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
04-04 15:01:41.196:E / AndroidRuntime(849):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-04 15:01:41.196:E / AndroidRuntime(849):在dalvik.system.NativeStart.main(本机方法)
04-04 15:01:41.196:E / AndroidRuntime(849):android.view.InflateException:二进制XML文件行#9:错误充气类android.widget.ListView产生的原因
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.createView(LayoutInflater.java:613)
04-04 15:01:41.196:E / AndroidRuntime(849):在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.inflate(LayoutInflater.java:489)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.inflate(LayoutInflater.java:396)
04-04 15:01:41.196:E / AndroidRuntime(849):在com.mowdowndevelopments.vault.AccountListFragment.onCreateView(AccountListFragment.java:121)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.Fragment.performCreateView(Fragment.java:1695)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:861)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1137)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.Activity.onCreateView(Activity.java:4717)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.inflate(LayoutInflater.java:466)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.inflate(LayoutInflater.java:396)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.inflate(LayoutInflater.java:352)
04-04 15:01:41.196:E / AndroidRuntime(849):在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.Activity.setContentView(Activity.java:1881)
04-04 15:01:41.196:E / AndroidRuntime(849):在com.mowdowndevelopments.vault.AccountListActivity.onCreate(AccountListActivity.java:45)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.Activity.performCreate(Activity.java:5104)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
04-04 15:01:41.196:E / AndroidRuntime(849):11 ...更多
04-04 15:01:41.196:E / AndroidRuntime(849):由:java.lang.reflect.InvocationTargetException
04-04 15:01:41.196:E / AndroidRuntime(849):在java.lang.reflect.Constructor.constructNative(本机方法)
04-04 15:01:41.196:E / AndroidRuntime(849):在java.lang.reflect.Constructor.newInstance(Constructor.java:417)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.view.LayoutInflater.createView(LayoutInflater.java:587)
04-04 15:01:41.196:E / AndroidRuntime(849):33 ...更多
04-04 15:01:41.196:E / AndroidRuntime(849):$ android.content.res.Resources NotFoundException:通过引起了绘制资源ID#0x7f0a0000文件RES /彩色/ view_selector_background.xml
04-04 15:01:41.196:E / AndroidRuntime(849):在android.content.res.Resources.loadDrawable(Resources.java:1953)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.content.res.TypedArray.getDrawable(TypedArray.java:601)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.widget.AbsListView<&初始化GT;(AbsListView.java:772)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.widget.ListView<&初始化GT;(ListView.java:143)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.widget.ListView<&初始化GT;(ListView.java:139)
04-04 15:01:41.196:E / AndroidRuntime(849):36 ...更多
04-04 15:01:41.196:E / AndroidRuntime(849):org.xmlpull.v1.XmlPullParserException:二进制XML文件行#4:引起<项目>标签需要一个'绘'属性或子标签定义绘制
04-04 15:01:41.196:E / AndroidRuntime(849):在android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:178)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-04 15:01:41.196:E / AndroidRuntime(849):在android.content.res.Resources.loadDrawable(Resources.java:1950)
04-04 15:01:41.196:E / AndroidRuntime(849):40 ...更多

这也使得Eclipse的抱怨:

  org.xmlpull.v1.XmlPullParserException:二进制XML文件行#3:<项目>标签需要一个'绘'属性或子标签定义绘制
    在android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:178)
    在android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885)
    在android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
    在com.android.layoutlib.bridge.impl.ResourceHelper.getDrawable(ResourceHelper.java:208)
    在android.content.res.BridgeTypedArray.getDrawable(BridgeTypedArray.java:782)
    在android.view.View<&初始化GT;(View.java:3330)
    在android.view.View<&初始化GT;(View.java:3259)
    在android.view.ViewGroup<&初始化GT;(ViewGroup.java:425)
    在android.widget.RelativeLayout<&初始化GT;(RelativeLayout.java:210)
    在sun.reflect.GeneratedConstructorAccessor64.newInstance(来源不明)
    在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    在java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    在android.view.LayoutInflater.createView(LayoutInflater.java:587)
    在android.view.BridgeInflater.onCreateView(BridgeInflater.java:86)
    在android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
    在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
    在android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:131)
    在android.view.LayoutInflater.inflate(LayoutInflater.java:466)
    在android.view.LayoutInflater.inflate(LayoutInflater.java:372)
    在com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:385)
    在com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:332)
    在com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325)
    在com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:440)
    在com.android.ide.eclipse.adt.internal.editors.layout.gle2.Render$p$pview.renderSync(Render$p$pview.java:560)
    在com.android.ide.eclipse.adt.internal.editors.layout.gle2.Render$p$pview.access$5(Render$p$pview.java:506)
    在com.android.ide.eclipse.adt.internal.editors.layout.gle2.Render$p$pview$RenderJob.runInUIThread(Render$p$pview.java:1230)
    在org.eclipse.ui.progress.UIJob $ 1.run(UIJob.java:95)
    在org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    在org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    在org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3529)
    在org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3182)
    在org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
    在org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
    在org.eclipse.ui.internal.Workbench.access $ 4(Workbench.java:2499)
    在org.eclipse.ui.internal.Workbench $ 7.run(Workbench.java:679)
    在org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    在org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
    在org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    在org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
    在org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    在org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    在org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    在org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
    在org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
    在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    在java.lang.reflect.Method.invoke(Method.java:601)
    在org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
    在org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    在org.eclipse.equinox.launcher.Main.run(Main.java:1438)
    在org.eclipse.equinox.launcher.Main.main(Main.java:1414)

我施加时到自定义视图的根布局选择器(具体地,为背景)从Eclipse中得到相同的抱怨,所以逻辑决定我会得到一个类似的错误。是不是我做错了吗?

编辑::好,感谢Vardo的,有没有更多的崩溃。但选择实际上并没有做任何事情。下面是列表项的布局,对于那些XML谁也许可以看到如何真正得到这个工作启动:

 <?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:ID =@ + ID / itemLayout
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>    <的TextView
        机器人:ID =@ + ID / NameView
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignParentLeft =真
        机器人:layout_alignParentTop =真
        机器人:文字=姓名
        机器人:textAppearance =机器人:ATTR / textAppearanceLarge
        工具:忽略=硬codedText/>    <的TextView
        机器人:ID =@ + ID / balanceView
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignParentLeft =真
        机器人:layout_below =@ + ID / NameView
        机器人:文字=平衡
        机器人:textAppearance =机器人:ATTR / textAppearanceSmall
        工具:忽略=硬codedText/>    < ImageView的
        机器人:ID =@ + ID / favStar
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignParentRight =真
        机器人:layout_alignParentTop =真
        机器人:layout_marginRight =10dp
        机器人:layout_marginTop =10dp
        机器人:contentDescription =@字符串/ accessFav
        机器人:SRC =@机器人:可绘制/ btn_star_big_on
        机器人:知名度=水涨船高/>< / RelativeLayout的>


解决方案

好吧,我清楚应该通过源$ C ​​$ C更经常地挖。最后我什么事做正在采取我的列表项的根布局:

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:ID =@ + ID / itemLayout
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>

和增加一个属性:

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:ID =@ + ID / itemLayout
    机器人:背景=机器人:ATTR / activatedBackgroundIndicator
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>

本加入 android.R.layout.simple_list_item_activated_1 看到的行为等。

So, I have a ListFragment with a custom layout which has a custom CursorAdapter that passes custom views to the ListView. The ListView has its choice mode set as MultiChoiceModal. However, selected items are never highlighted, whether I'm selecting one item in normal mode or several in Action Mode. To solve this, I tried a Selector.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/holo_blue_dark"
        android:state_pressed="true" />
    <item android:color="@android:color/holo_blue_light"
        android:state_checked="true" />
    <item android:color="@android:color/holo_blue_bright"
        android:state_selected="true" />
</selector>

Hoowever, applying this to the ListView as the list's List Selector just leads to the app crashing and this error when I try to run it:

04-04 15:01:41.196: E/AndroidRuntime(849): FATAL EXCEPTION: main
04-04 15:01:41.196: E/AndroidRuntime(849): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mowdowndevelopments.vault/com.mowdowndevelopments.vault.AccountListActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class android.widget.ListView
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.os.Looper.loop(Looper.java:137)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.ActivityThread.main(ActivityThread.java:5041)
04-04 15:01:41.196: E/AndroidRuntime(849):  at java.lang.reflect.Method.invokeNative(Native Method)
04-04 15:01:41.196: E/AndroidRuntime(849):  at java.lang.reflect.Method.invoke(Method.java:511)
04-04 15:01:41.196: E/AndroidRuntime(849):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-04 15:01:41.196: E/AndroidRuntime(849):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-04 15:01:41.196: E/AndroidRuntime(849):  at dalvik.system.NativeStart.main(Native Method)
04-04 15:01:41.196: E/AndroidRuntime(849): Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class android.widget.ListView
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.createView(LayoutInflater.java:613)
04-04 15:01:41.196: E/AndroidRuntime(849):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
04-04 15:01:41.196: E/AndroidRuntime(849):  at com.mowdowndevelopments.vault.AccountListFragment.onCreateView(AccountListFragment.java:121)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.Fragment.performCreateView(Fragment.java:1695)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:861)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1137)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.Activity.onCreateView(Activity.java:4717)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
04-04 15:01:41.196: E/AndroidRuntime(849):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.Activity.setContentView(Activity.java:1881)
04-04 15:01:41.196: E/AndroidRuntime(849):  at com.mowdowndevelopments.vault.AccountListActivity.onCreate(AccountListActivity.java:45)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.Activity.performCreate(Activity.java:5104)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
04-04 15:01:41.196: E/AndroidRuntime(849):  ... 11 more
04-04 15:01:41.196: E/AndroidRuntime(849): Caused by: java.lang.reflect.InvocationTargetException
04-04 15:01:41.196: E/AndroidRuntime(849):  at java.lang.reflect.Constructor.constructNative(Native Method)
04-04 15:01:41.196: E/AndroidRuntime(849):  at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.view.LayoutInflater.createView(LayoutInflater.java:587)
04-04 15:01:41.196: E/AndroidRuntime(849):  ... 33 more
04-04 15:01:41.196: E/AndroidRuntime(849): Caused by: android.content.res.Resources$NotFoundException: File res/color/view_selector_background.xml from drawable resource ID #0x7f0a0000
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.content.res.Resources.loadDrawable(Resources.java:1953)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.widget.AbsListView.<init>(AbsListView.java:772)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.widget.ListView.<init>(ListView.java:143)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.widget.ListView.<init>(ListView.java:139)
04-04 15:01:41.196: E/AndroidRuntime(849):  ... 36 more
04-04 15:01:41.196: E/AndroidRuntime(849): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #4: <item> tag requires a 'drawable' attribute or child tag defining a drawable
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:178)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-04 15:01:41.196: E/AndroidRuntime(849):  at android.content.res.Resources.loadDrawable(Resources.java:1950)
04-04 15:01:41.196: E/AndroidRuntime(849):  ... 40 more

It also causes Eclipse to complain:

org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: <item> tag requires a 'drawable' attribute or child tag defining a drawable
    at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:178)
    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885)
    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
    at com.android.layoutlib.bridge.impl.ResourceHelper.getDrawable(ResourceHelper.java:208)
    at android.content.res.BridgeTypedArray.getDrawable(BridgeTypedArray.java:782)
    at android.view.View.<init>(View.java:3330)
    at android.view.View.<init>(View.java:3259)
    at android.view.ViewGroup.<init>(ViewGroup.java:425)
    at android.widget.RelativeLayout.<init>(RelativeLayout.java:210)
    at sun.reflect.GeneratedConstructorAccessor64.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
    at android.view.BridgeInflater.onCreateView(BridgeInflater.java:86)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:131)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:372)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:385)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:332)
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325)
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:440)
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderPreview.renderSync(RenderPreview.java:560)
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderPreview.access$5(RenderPreview.java:506)
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderPreview$RenderJob.runInUIThread(RenderPreview.java:1230)
    at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3529)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3182)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414)

I get the same complaints from Eclipse when applying the selector to the root layout of the custom view (specifically, as the background), so logic dictates I'd get a similar error. Is there something I'm doing wrong?

EDIT: Well, thanks to vArDo, there are no more crashes. But the selector doesn't actually do anything. Here's the xml for the list item's layout, for those who maybe can see how to actually get this to start working:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/itemLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/NameView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Name"
        android:textAppearance="?android:attr/textAppearanceLarge"
        tools:ignore="HardcodedText" />

    <TextView
        android:id="@+id/balanceView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/NameView"
        android:text="Balance"
        android:textAppearance="?android:attr/textAppearanceSmall"
        tools:ignore="HardcodedText" />

    <ImageView
        android:id="@+id/favStar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:contentDescription="@string/accessFav"
        android:src="@android:drawable/btn_star_big_on"
        android:visibility="gone" />

</RelativeLayout>

解决方案

Alright, clearly I should be digging through the source code more often. What I ended up doing was taking the root layout of my list item:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/itemLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

And added one attribute:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/itemLayout"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

This added the behavior seen in android.R.layout.simple_list_item_activated_1 et al.

这篇关于不能自定义选择添加到ListView控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆