1

我正在尝试制作自定义列表。在列表适配器中,我在 getView(..) 方法中实现了这段代码:

        final RelativeLayout layout = (RelativeLayout) row.findViewById(R.id.layout_main);

        layout.setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                switch (event.getAction())
                    {
                        case MotionEvent.ACTION_DOWN:
                        {
                            layout.setBackgroundColor(context.getResources().getColor(R.color.asia_red_color));
                            return true;
                        }

                        case MotionEvent.ACTION_CANCEL:
                        case MotionEvent.ACTION_UP:
                        {
                            layout.setBackgroundColor(context.getResources().getColor(R.color.white));
                            return true;
                        }
                    }

                return false;
            }
        });

请注意,我实现的侦听器阻止/覆盖执行我在 MainActivity 中实现的 onItemClickListener。

有什么解决办法吗?

4

2 回答 2

1

才刚刚OnItemClickListener

定义选择器

可绘制文件夹中的 bkg.xml

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

将选择器设置为列表视图。到自定义布局android:background="@drawable/bkg"

在 color.xml 中定义颜色

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="white">#FFFFFF</color>
    <color name="yellow">#FFFF00</color>
</resources>

还要检查您的 lsitview 行项目是否有按钮。当您单击按钮时可能会获得焦点。

于 2013-10-31T08:05:04.990 回答
0

我不确定这里发生了什么,但您可以尝试在 的分支中调用OnTouchListener超类的,如下所示:defaultswitch

layout.setOnTouchListener(new View.OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            switch (event.getAction())
                {
                    case MotionEvent.ACTION_DOWN:
                    {
                        layout.setBackgroundColor(context.getResources().getColor(R.color.asia_red_color));
                        return true;
                    }

                    case MotionEvent.ACTION_CANCEL:
                    case MotionEvent.ACTION_UP:
                    {
                        layout.setBackgroundColor(context.getResources().getColor(R.color.white));
                        return true;
                    }
                    default: return super.OnTouchListener();
                }

        }
    });

如果语法不正确,请原谅我,因为我现在只是在浏览器上,但你明白了。

于 2013-10-31T08:14:54.540 回答