Android 水平视图选择器

Android 水平视图选择器,android,Android,我有一个HorizontalListView,里面有几个项目,每个项目都有一个相对的布局,包含一些文本和一个图像。我已经在这个相对布局中添加了一个选择器,它在android的较新版本中工作得非常好,当按下时,将每个项目的相对值设置为白色 问题是,在旧版本的android中,当我滚动时,HorizontalListview开始出现奇怪的行为,这是因为我将android:clickable=“true”添加到每个相对布局中。如果删除此属性,HLV将正常工作,但选择器将不工作 以下是我的布局: <

我有一个HorizontalListView,里面有几个项目,每个项目都有一个相对的布局,包含一些文本和一个图像。我已经在这个相对布局中添加了一个选择器,它在android的较新版本中工作得非常好,当按下时,将每个项目的相对值设置为白色

问题是,在旧版本的android中,当我滚动时,HorizontalListview开始出现奇怪的行为,这是因为我将android:clickable=“true”添加到每个相对布局中。如果删除此属性,HLV将正常工作,但选择器将不工作

以下是我的布局:

<RelativeLayout
        android:id="@+id/marcoNota"
        android:layout_width="@dimen/tile_width"
        android:layout_height="@dimen/tile_height"
        android:background="@drawable/tile_selector"
        android:clickable="true"
        android:paddingBottom="2dp"
        android:paddingTop="2dp"
        android:paddingLeft="2dp"
        android:paddingRight="2dp"> 
</RelativeLayout>

我甚至尝试在适配器上设置onTouchListener,以获得相同的结果


我想知道是否可以使用选择器whitout设置Clickable=“true”或任何解决方法。

我解决了在HorizontalListView.java中实现以下方法的问题:

这用于检测动作(当用户将手指提离选定视图并绘制相对布局时,将其保持为默认颜色):

对于所选的侦听器项,我使用了类中已定义的侦听器:

private OnItemSelectedListener mOnItemSelected;
最后,我在适配器中设置了侦听器:

HorizontalListView listview = (HorizontalListView) retval.findViewById(R.id.listviewH);
listview.setOnItemSelectedListener(this);
listview.setOnItemUnSelectedListener(this);
我根据用户是否按下视图来设置布局的颜色

@Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
        if(arg1.findViewById(R.id.marcoNota) != null){
            arg1.findViewById(R.id.marcoNota).setBackgroundColor(Color.WHITE);
        }

    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {


    }

    @Override
    public void onItemUnSelected(View v) {
        if(v.findViewById(R.id.marcoNota) != null){
        v.findViewById(R.id.marcoNota).setBackgroundColor(Color.BLACK);
        }
    }
@覆盖
已选择公共视图(AdapterView arg0、视图arg1、内部arg2、长arg3){
if(arg1.findViewById(R.id.marconta)!=null){
arg1.findViewById(R.id.Marconta).setBackgroundColor(Color.WHITE);
}
}
@凌驾
未选择公共无效(AdapterView arg0){
}
@凌驾
已选择公共视图(视图v){
如果(v.findViewById(R.id.marcoNota)!=null){
v、 FindViewbyd(R.id.marcoNota).setBackgroundColor(颜色.黑色);
}
}

我知道这是一个非常具体的问题,但在这里,如果有人需要这样做。

如果我理解正确,您应该能够使用OnItemClick Listener,但我不知道它是否会给出与OnTouchListener不同的结果否它会给出相同的结果,谢谢您的回答
private OnItemSelectedListener mOnItemSelected;
HorizontalListView listview = (HorizontalListView) retval.findViewById(R.id.listviewH);
listview.setOnItemSelectedListener(this);
listview.setOnItemUnSelectedListener(this);
@Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
        if(arg1.findViewById(R.id.marcoNota) != null){
            arg1.findViewById(R.id.marcoNota).setBackgroundColor(Color.WHITE);
        }

    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {


    }

    @Override
    public void onItemUnSelected(View v) {
        if(v.findViewById(R.id.marcoNota) != null){
        v.findViewById(R.id.marcoNota).setBackgroundColor(Color.BLACK);
        }
    }