【问题标题】:setBackgroundColor for listView item not working on JellyBeanlistView 项目的 setBackgroundColor 在 JellyBean 上不起作用
【发布时间】:2013-03-23 13:38:54
【问题描述】:

我有一个带有自定义适配器的 listView。选择时,我已使 listView 项目的背景更改颜色。这在三星 Galaxy S2 上的 Ice Cream Sandwich 4.0.4 和模拟器上的 ICS 4.0.3 上完美运行。但它不适用于 4.2.2 JellyBean 模拟器。在 JB 上,当一个项目被选中时,它的背景保持不变。

这是我的代码的一部分,其中我有在选择项目时设置背景颜色的逻辑:

private int mItemIndex = -1;

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;           
        ....

        if (convertView == null) {
            ....
            ....

        } else {
            /* To highlight the selected item */
            if (position == mItemIndex) {
                convertView.setSelected(true);
                convertView.setPressed(true);
                convertView.setBackgroundColor(context.getResources().getColor(R.color.SkyBlue));
            } else {
                convertView.setSelected(false);
                convertView.setPressed(false);
                convertView.setBackgroundColor(context.getResources().getColor(R.color.WhiteSmoke));
            }
            /* To highlight the selected item - end */

            ....
            ....

        return v;
    }

或者,我尝试过 convertView.setBackgroundResource(context.getResources().getColor(R.color.SkyBlue)); 而不是 setBackgroundColor,它也不起作用。

有没有一种解决方法可以让它在 Jellybean 上工作? 还是我在代码中遗漏了什么?

谢谢。

【问题讨论】:

  • 您是否只需要更改颜色来突出显示 ListView 中的选定项?
  • @Pragnani,谢谢。我看到你告诉我有一个布尔数组来跟踪状态,但我不完全理解如何在我的场景中实现它。从我调用 listView 的活动中,listView.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ((TransactionListAdapter)listView.getAdapter()).setSelectItem(arg2); } });setSelectItem()mItemIndex 设置为传入的 arg2。我的适配器类中应该有布尔数组吗?
  • @Maver1ck,是的,颜色变化会突出显示所选项目。我在操作栏上有按钮,我可以单击这些按钮对所选项目进行操作。
  • @RBK 同样的逻辑在这里适用......我会发布答案......

标签: android android-listview android-4.2-jelly-bean


【解决方案1】:

采用具有两个不同状态图像的自定义选择器进行选择和非选择

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/pause_button"
          android:state_selected="true" />
    <item android:drawable="@drawable/play_button" />
</selector>

1.在你的activity中创建一个全局变量

View previous;(获取您的列表行视图组)

在你的 onCreate 方法中,在 setContentView 之后像这样初始化

previous=new View(context);

在你的 listView 的 onItemClick 监听器中这样做

list.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> arg0, View view,
                        int arg2, long arg3) {
                    view.setSelected(true);
                                       previous.setSelected(false);
                                        previous=current;
                }
            });

【讨论】:

  • 目前我没有自定义选择器,而是列表视图行的自定义视图:gist.github.com/bharatkrishna/5175158 我将看看如何将其转换为选择器。对不起,我是 Android 开发的业余爱好者。将尝试并在这里发表我的评论。谢谢。
  • @RBK 如果您对自定义可绘制选择器没有想法,那么直接设置背景颜色而不是 setSelected,即在上面的答案中,view.setBackgroundColor(yourcolor); , 为之前的设置正常列表项不高亮时的颜色
  • 谢谢!我按照你说的做了,效果很好。这是我的 setOnItemClickListner:pastebin.com/4CPwicb0。顺便说一句,在您的回答中,我认为您的意思是 previous=view 而不是 previous=current
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多