Android ListView选择器问题:选择未被删除

Android ListView选择器问题:选择未被删除,android,listview,selector,listviewitem,Android,Listview,Selector,Listviewitem,我有一个列表视图。单击ListItem时,我将ListItem(其视图)的背景设置为另一种颜色: listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> a, View v, int position, long id) {

我有一个列表视图。单击ListItem时,我将ListItem(其视图)的背景设置为另一种颜色:

  listView.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                    setupDetailView(position);
                    setupChartView(position);
                    setupARView(position);
                    emptyView.setVisibility(View.INVISIBLE);

                    quotesAdapter.isSelected = true;
                    //v.setBackgroundResource(R.drawable.stocks_selector);
                }
            });
listView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图单击(适配器视图a、视图v、内部位置、长id){
设置详细视图(位置);
设置图表视图(位置);
设置视图(位置);
emptyView.setVisibility(View.INVISIBLE);
quotesAdapter.isSelected=true;
//v、 setBackgroundResource(R.drawable.stocks_selector);
}
});
这是我的适配器:

private class QuoteAdapter extends ArrayAdapter<Quote> {

        private ArrayList<Quote> items;
        public boolean isSelected = false;

        public QuoteAdapter(Context context, int textViewResourceId, ArrayList<Quote> items) {
            super(context, textViewResourceId, items);
            this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.mainrow, null);

                if(isSelected)
                    v.setBackgroundResource(R.drawable.red);
                else
                    v.setBackgroundResource(R.drawable.transparent_background);
            }
私有类QuoteAdapter扩展了ArrayAdapter{
私有ArrayList项;
公共布尔值isSelected=false;
公共QuoteAdapter(上下文上下文、int-textViewResourceId、ArrayList项){
super(上下文、textViewResourceId、项);
这个项目=项目;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null){
LayoutInflater vi=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
v=vi.充气(R.layout.mainrow,空);
如果(当选)
v、 挫折资源(R.drawable.red);
其他的
v、 setBackgroundResource(R.drawable.透明背景);
}
问题是,如果选择多行,则多行具有彩色背景。我只希望单击的项目具有彩色背景。因此,如果单击第2行,我希望它变为红色,如果单击第1行,我希望第2行恢复正常,第1行变为红色


我如何才能做到这一点?

将列表选择器放在ListView中

 <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000"
        android:listSelector="@drawable/stocks_selector" />

您的stocks_selector.xml应该如下所示

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    type="rectangle"

>
    <gradient
        android:startColor="@color/start_gradient"
        android:endColor="@color/end_gradient" 
        android:angle="270" />
/>
</shape>

/>

Um,您不需要状态列表。ListView将管理所选内容。请查看SDK drawables(列表…xml)查看如何生成选择器。我确实删除了setBackround。我知道ListView将管理所选内容,但我希望在用户单击另一行之前保持所选状态不变。不建议这样做,但我正在尝试创建一种行为。您可以尝试以下操作-为您的项目添加属性isSelected(无论您在适配器中使用什么)onClick将此属性设置为该项,并将其从以前标记的项中删除。在getView集合背景中,基于isSelected。我在适配器类中创建了一个isSelected成员,并在onClick中设置它(请参阅更新的代码)。背景不会更改值。您可以发送选项语气,即listView.setChoiceMode(single/multiple);,将其设置为single将解决您的问题。