【问题标题】:The function is called twice when the surface is touched触摸表面时调用该函数两次
【发布时间】:2015-04-28 11:14:38
【问题描述】:

我有一个带有可触摸或可点击布局的片段,我不知道为什么当我触摸片段的布局并离开手指时,功能“”retrieveMQTTConnAssets()“”被调用两次“当我触摸表面并保持触摸时第二次离开手指时”

pease et meknow hw 以避免这种行为。

更新

实际上,我现在解决了它,而不是返回true,而是返回false。但我不明白,为什么会这样。

代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.w(TAG, "@onCreateView()");
    View root = inflater.inflate(R.layout.eco_frag, container, false);
    root.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            //Toast.makeText(getActivity().getApplicationContext(), "toched", Toast.LENGTH_SHORT).show();
            retrieveMQTTConnAssets();
            return true;
        }
    });
    return root;
}

【问题讨论】:

    标签: android android-fragments fragment android-fragmentactivity


    【解决方案1】:

    问题很简单,就是这样

    root.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            //this is called, right?
            retrieveMQTTConnAssets();
            return true;
        }
    });
    

    onTouch 中,您会收到一个名为MotionEvent 的参数。 MotionEvent 存储了一个名为 action 的东西,它可以有很多值(参见 reference),但最重要的是 ACTION_DOWNACTION_UP

    如果你想让它只在你释放它时运行,那么你应该检查那种类型的动作。

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP) {
            retrieveMQTTConnAssets();
        }
        return true;
    }
    

    【讨论】:

    • 我是这么说的。再解释一下:ACTION_DOWN 是用户开始触摸屏幕的时间,ACTION_UP 是用户停止触摸屏幕的时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多