【问题标题】:ListView selector problem: Selection does not get removedListView 选择器问题:选择没有被删除
【发布时间】:2010-09-27 21:48:42
【问题描述】:

我有一个列表视图。当我单击一个 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);
                }
            });

这是我的适配器:

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);
            }

问题是,如果我选择多行,那么多行会有彩色背景。我只希望单击的项目具有彩色背景。所以如果我点击第 2 行,我希望它变成红色,然后如果我点击第 1 行,我希望第 2 行恢复正常,第 1 行变成红色。

我该怎么做?

【问题讨论】:

    标签: android listview selector listviewitem


    【解决方案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>
    

    【讨论】:

    • 嗯,你不需要状态列表。 ListView 将管理选择的内容。查看 SDK 可绘制对象 ( list..xml ) 了解如何构建选择器。
    • 我确实删除了 setBackround。我知道 ListView 将管理选定的内容,但我想保持选定的状态持续存在,直到用户单击另一行。不建议这样做,但这是我正在尝试创建的一种行为。
    • 您可以尝试以下操作 - 为您的项目添加属性 isSelected(无论您在适配器中使用什么) onClick 将此属性设置为该项目并将其从先前标记的项目中删除。在你的getView中设置背景基于isSelected。
    • 我在我的 Adapter 类中创建了一个 isSelected 成员,并将其设置在我的 onClick 中(请参阅更新的代码)。背景没有改变值。
    • 你可以发送选择心情,即listView.setChoiceMode(single/multiple);,设置为single可以解决你的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多