4

我有ListView一个Activity. 每ListView行都是LinearLayouts 并且包含两个孩子Views,两者都是clickable。结构是这样的——

 ______________________________
|      |                       |
|______|_______________________|

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

你能建议我什么是最好的方法吗?

4

2 回答 2

3

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

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

我认为,另一种选择是在处理滑动的普通行视图之上有一个覆盖视图。

于 2012-12-09T14:05:00.233 回答
1

在您的BaseAdapteroverridegetView中,获取对每个孩子的引用并为每个孩子设置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和 Swipe 的更多信息,请查看 GoogleGestureDetectorSimpleOnGestureListener示例。

于 2012-12-09T14:16:08.277 回答