Android - 使用具有多个可点击子项的父视图的onTouch

时间:2012-12-08 08:31:51

标签: android touch gesture ontouchlistener

我在ListView中有一个ActivityListView行各LinearLayout行,包含两个子View,两者均为clickable。结构是这样的 -

 ______________________________
|      |                       |
|______|_______________________|

现在,我想保留两个clickable项并检测父View上的滑动操作,即the LinearLayout

你能否告诉我最好的办法是什么?

2 个答案:

答案 0 :(得分:3)

  

现在,我想保持这两个项目可点击并检测滑动操作   在父视图上,即LinearLayout。

您可以创建自己的行View,其中包含LinearLayout并将包装这两个子视图。为此,使用onInterceptTouchEventonTouch方法来检测滑动。如果您需要知道当前正在滑动哪一行,您可以让自定义视图记住它在列表中的位置,并更新适配器的getView方法中的位置。

我认为另一个选择是在普通行视图的顶部有一个覆盖视图,用于处理滑动。

答案 1 :(得分:1)

BaseAdapter覆盖getView中,获取每个孩子的引用并为每个孩子设置onClickLister,每次调用getView时,示例:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView==null){
            convertView = inflater.inflate(R.layout.layout, parent,false);
        }

        final MyClass item = (MyClass)getItem(position);

        View child1 = convertView.findViewById(R.id.child1);
        child1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("tag", "child1 from item "+ position +" , is clicked.");

            }
        });

        View child2 = convertView.findViewById(R.id.child2);
        child2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("tag", "child2 from item "+ position +" , is clicked.");

            }
        });

        return convertView;}

并且对于Swipe,扩展您的LinearLayout并覆盖其中的onInterceptTouchEvent,并将其传递给GestureDetector并处理其上的滚动。 有关GestureDetector和轻扫的更多信息,请查看Google以查找GestureDetectorSimpleOnGestureListener个样本。