【问题标题】:setOnTouchListener is not working for android FragmentsetOnTouchListener 不适用于 android Fragment
【发布时间】:2015-06-14 16:02:23
【问题描述】:

我正在使用 TabView 并且在 Tab 中,我正在使用 Fragment 加载每个选项卡。现在我想在用户触摸任何片段时获取 Touch 事件。 我正在提供我的片段代码之一

 public MobileBankingFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    context = (FragmentActivity) super.getActivity();
    view = inflater.inflate(R.layout.fragment_mobile_banking, container, false);
    alarm = new TimerReceiver();
    init(view);
    touchListener(view);
    return view;
}

private void touchListener(View view) {
    layout= (FrameLayout) view.findViewById(R.id.fragmentMobileBanking);
    layout.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Toast.makeText(context, "you just touch the screen :-)", Toast.LENGTH_SHORT).show();
            return true;
        }
    });


    view.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Toast.makeText(context, "you just touch the screen :-)", Toast.LENGTH_SHORT).show();
            startTheTimerForTenSecond();
            return true;
        }
    });
}

在这里,我尝试通过两种方式获取触摸事件,一种是通过事件,另一种是通过布局的 id。但是没有运气。此代码没有错误,但也没有输出。
帮帮我。

【问题讨论】:

  • 为什么不使用OnClickListener

标签: android android-fragments fragment ontouchlistener tabview


【解决方案1】:

它对我有用:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_take_attendance, container, false);
    touchListener(view);
    ..
}
 private void touchListener(View view) {
        view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getActionMasked() == MotionEvent.ACTION_DOWN){
                    Toast.makeText(getActivity(), "you just touch the screen :-)", Toast.LENGTH_SHORT).show();
                }
                return true;
            }
        });
    }

当你触摸整个片段时它会监听

【讨论】:

  • 如果我发送错误的视图,那么应用程序必须显示错误或崩溃
  • @ShafiqUllahShohag 我在 Fragment 中尝试了此代码,单击 TextView,它可以工作。删除方法中的第一个 layout.setOnTouchListener()
  • lskenderov ,我想为整个布局进行触摸事件,比如用户可能会触摸没有按钮或文本的地方,我该怎么做?
  • @ShafiqUllahShohag 我改变了,在我的情况下,我在我的onCreateView 中定义了View view
  • 我想我找到了问题所在。整个片段是一个回收视图,所以也许回收视图正在消耗触摸?
【解决方案2】:

您必须继承 ViewPager 并覆盖 interceptTouchEvent()onTouchEvent() 以区分滑动手势和触摸片段事件。 https://developer.android.com/training/gestures/viewgroup.html

【讨论】:

  • 标签滑动时会产生问题,再次无法触摸事件,寻呼机滑动时会触摸...
  • 你说得对,我可以得到它的按钮点击。但在我的问题中,我不仅要为按钮点击设置计时器,还要为其他元素的触摸设置计时器。所以我的逻辑是在布局中进行任何形式的触摸来设置计时器。
  • 只需在布局中添加一个OnClickListenerOnClickListener 可以在 Android 上的任何视图(布局也是一个视图)上设置,而不仅仅是在按钮上。
  • 我尝试过,但没有运气。你能给我一个对你有用的示例代码吗?
【解决方案3】:

您只需要在您的fragments xml 中添加``focusable="true" 和clicable="true"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多