Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Can';t将自定义选择器添加到ListView_Android_Android Layout_Android Listview_Android Selector - Fatal编程技术网

Android Can';t将自定义选择器添加到ListView

Android Can';t将自定义选择器添加到ListView,android,android-layout,android-listview,android-selector,Android,Android Layout,Android Listview,Android Selector,因此,我有一个带有自定义布局的ListFragment,它有一个自定义CursorAdapter,将自定义视图传递给ListView。ListView的选择模式设置为multichoicemodel。但是,无论我是在正常模式下选择一个项目还是在操作模式下选择几个项目,所选项目都不会高亮显示。为了解决这个问题,我尝试了一个选择器 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schem

因此,我有一个带有自定义布局的
ListFragment
,它有一个自定义
CursorAdapter
,将自定义视图传递给
ListView
ListView
的选择模式设置为
multichoicemodel
。但是,无论我是在正常模式下选择一个项目还是在操作模式下选择几个项目,所选项目都不会高亮显示。为了解决这个问题,我尝试了一个选择器

<?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>
它还导致Eclipse抱怨:

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)
org.xmlpull.v1.XmlPullParserException:二进制XML文件行#3:tag需要一个“drawable”属性或定义drawable的子标记
在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.(view.java:3330)
在android.view.view.(view.java:3259)
在android.view.ViewGroup。(ViewGroup.java:425)
在android.widget.RelativeLayout.(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.充气(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.layoutbrary.createSession(layoutbrary.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.RenderPreview.renderSync(RenderPreview.java:560)
在com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderPreview.access$5(RenderPreview.java:506)
位于com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderPreview$RenderJob.runInUIThread(RenderPreview.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.runasynchmessages(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.eclipseeapphandle.run上(eclipseeapphandle.java:196)
位于org.eclipse.core.runtime.internal.adapter.eclipseeappluncher.runApplication(eclipseeappluncher.java:110)
位于org.eclipse.core.runtime.internal.adapter.eclipseeappluncher.start(eclipseeappluncher.java:79)
位于org.eclipse.core.runtime.adapter.EclipseStarter.run(EclipseStarter.java:353)
位于org.eclipse.core.runtime.adapter.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 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>

列表视图中
android:listSelector需要是可绘制的(),因此XML
选择器
文件中的每个
标记都必须包含
android:drawable
。只需将
android:color
更改为
android:drawable
(您可以使用相同的值),您当前的错误就会消失

替换后的文件应如下所示:

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

列表视图中
android:listSelector需要是可绘制的(),因此XML
选择器
文件中的每个
标记都必须包含
android:drawable
。只需将
android:color
更改为
android:drawable即可<
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/holo_blue_dark"
        android:state_pressed="true" />
    <item android:drawable="@android:color/holo_blue_light"
        android:state_checked="true" />
    <item android:drawable="@android:color/holo_blue_bright"
        android:state_selected="true" />
</selector>
class CustomAdapter extends BaseAdapter{
...

int selectedID;

public void setSelectedId(int n)
{
selectedID = n;
}

public View getView(int position, View convertView, ViewGroup parent) {
....
if(position == selectedID)
convertView.setBackgroundColor(someColor);
return convertView;
}
customAdapter.setSelectedId(position) 
<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" >
<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" >