Android 安卓-在一个片段中计算屏幕上点击的次数

Android 安卓-在一个片段中计算屏幕上点击的次数,android,android-fragments,Android,Android Fragments,一个非常简单的问题:我有一个片段,如果满足某个条件,我希望它计算屏幕上点击的次数 所以我做了一个 view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count_tap++; } }); 这似乎几乎是可行的,但在我看来,在某些项目上,没有观察到组件。我是否必须为我的所有组件(甚至是那些通常是静态xml

一个非常简单的问题:我有一个片段,如果满足某个条件,我希望它计算屏幕上点击的次数

所以我做了一个

view.setOnClickListener(new View.OnClickListener() {
   @Override
       public void onClick(View v) {
           count_tap++;
       }
   });
这似乎几乎是可行的,但在我看来,在某些项目上,没有观察到组件。我是否必须为我的所有组件(甚至是那些通常是静态xml的组件)提供和标识,并使用相同的
setOnClickListener
设置它们


或者这样做是错误的吗?

如果需要活动或片段的根视图,请使用
findviewbyd(android.R.id.content)

比如:

View.OnClickListener
设置为此视图:

view.setOnClickListener(new View.OnClickListener() {
   @Override
       public void onClick(View v) {
           count_tap++;
       }
   });

您可以包装片段的根视图,并计算润色次数

public class TouchCounter extends FrameLayout {
    private int touchCount;


    public TouchableOverlay(Context context) {
        super(context);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {

            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP: {
                touchCount++;
                break;
            }
        }
        return super.dispatchTouchEvent(ev);
    }

    public int getTouchCount() {
        return touchCount;
    }
}
在你的片段中:

.....

private TouchCounter touchCounter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_layout, container, false);
        return addTouchCounter(view);
}
.....

private void addTouchCounter(View view) {
     touchCounter = new TouchCounter(getContext());
     touchCounter.addView(view);
     return touchCounter;
}

如果您只想计算点击次数,还可以添加一个ACTION_DOWN的案例,并计算ACTION_DOWN和ACTION_UP/CANCEL之间的时间差。

如果您的布局中没有任何按钮或其他触摸手势,下面是另一个可能可行的想法,但我想有更优雅的方法可以做到这一点。 您可以使用另一个透明的
视图
覆盖布局,并使用此透明的
视图
计算点击次数

大概是这样的:

    <FrameLayout
            android:id="@+id/view_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                /// instead of this LinearLayout you can put your layout
            </LinearLayout>

            <View
                android:id="@+id/click_counter_layout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clickable="true"
                android:background="@android:color/transparent"/>

    </FrameLayout>

///您可以将您的布局替换为线性布局

您应该充气
查看\u框架
,并在
单击计数器\u布局
上设置一个单击侦听器,而不是布局。希望它能起作用……

不,它根本不起作用。。。点击某些元素(如文本视图)不被计算在内。。我可以让用户点击一个按钮来解决这个问题,但是如果可能的话,我不希望发生这种情况,因为您已经在
TextView
上设置了
setOnClickListener
,它在点击
TextView
时被调用,而不是根视图侦听器。不,我已经按照您的建议在我创建的新根视图上设置了它。正如我所说,当点击元素(如textview)时,点击根本不被计算在内。我希望它能在我所有的屏幕上工作,你的完整片段。
    <FrameLayout
            android:id="@+id/view_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                /// instead of this LinearLayout you can put your layout
            </LinearLayout>

            <View
                android:id="@+id/click_counter_layout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clickable="true"
                android:background="@android:color/transparent"/>

    </FrameLayout>