【问题标题】:How to detect if ondraglistener is already finish? (android)如何检测 ondraglistener 是否已经完成? (安卓)
【发布时间】:2013-10-24 05:01:46
【问题描述】:

我需要在使用 stopSelf() 激活侦听器后停止此服务;但是,即使没有 Drag 事件,服务也会结束...如何在调用 StopService 之前检测是否发生了 Drag 事件?

           mainButton.setOnTouchListener(new MyTouchListener());
           vTopLeft.setOnDragListener(new MyDragListener());
           vTopRight.setOnDragListener(new MyDragListener());
           vBottomLeft.setOnDragListener(new MyDragListener());
           vBottomRight.setOnDragListener(new MyDragListener());
           Log.d("tok", "add mview");
           stopSelf(); ---> this should wait after draglistener is finish.

MyDragListener.java

Public class MyDragListener implements View.OnDragListener  {


@Override
public boolean onDrag(View v, DragEvent event) {
    String containerName = null;
    int ID = 0;
    int Dragaction = event.getAction();
    int gravity2 = 1234567879;

    switch (event.getAction()) {
        case DragEvent.ACTION_DRAG_STARTED:

            break;
        case DragEvent.ACTION_DRAG_ENTERED:
            break;
        case DragEvent.ACTION_DRAG_EXITED:
            break;
        case DragEvent.ACTION_DROP:

            View view = (View) event.getLocalState();

            ViewGroup owner = (ViewGroup) view.getParent();
            owner.removeView(view);
            owner.setVisibility(View.GONE);
            FrameLayout container = (FrameLayout) v;
            container.addView(view);

            LocationSerializable ls = new LocationSerializable();
            switch (v.getId()) {
                case R.id.topLeft:


                    gravity2 = Gravity.LEFT | Gravity.TOP;

                    ls.setGravity(gravity2);
                    break;

                case R.id.topRight:

                    gravity2 = Gravity.RIGHT | Gravity.TOP;
                    ls.setGravity(gravity2);
                    break;

                case R.id.bottomLeft:
                    gravity2= Gravity.BOTTOM | Gravity.LEFT;
                    ls.setGravity(gravity2);

                    break;
                case R.id.bottomRight:
                    gravity2 = Gravity.RIGHT | Gravity.BOTTOM;
                    ls.setGravity(gravity2);
                    break;

                default:
                    throw new RuntimeException("Unknown ID");
            }

            LinearLayout containerParent = (LinearLayout) v.getParent();

            LinearLayout conatainerGrandMother = (LinearLayout) containerParent.getParent();

            conatainerGrandMother.setVisibility(View.GONE);




        case DragEvent.ACTION_DRAG_ENDED:

        default:


            break;
    }
    return false;
    }
}

【问题讨论】:

    标签: java android listener gravity


    【解决方案1】:

    case DragEvent.ACTION_DRAG_ENDED:停止你的服务

    下面是一个示例模板。

     @Override
          public boolean onDrag(View v, DragEvent event) {
            int action = event.getAction();
            switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
            // do nothing
              break;
            case DragEvent.ACTION_DRAG_ENTERED:
                break;
            case DragEvent.ACTION_DRAG_EXITED:        
    
              break;
            case DragEvent.ACTION_DROP:
              // Dropped, reassign View to ViewGroup
    
              break;
            case DragEvent.ACTION_DRAG_ENDED:
             // option 1
              Context.stopService();
               // option 2
                // stopService(new Intent(Activity.this,MailService.class));
               //stopSelf();
                //  other alternative is
                 //  v.getContext().stopService(new Intent(v.getContext(),DragDropButtonMainService.class));
              break;
            }
            return true;
          }
    

    根据android docs

    用户释放拖拽阴影后,系统发出(如有必要)动作类型为 ACTION_DROP 的拖拽事件后,系统发出动作类型为 ACTION_DRAG_ENDED 的拖拽事件,表示拖拽操作结束。

    【讨论】:

    • 谢谢,但我的 MyDragListener() 中没有 stopSelf()。我将在这里发布代码..它只实现了view.ondraglistener。
    • 我的要求是在 Action_Drop 或 ACTION_DRAG_ENDED 期间,我需要停止我的服务...您的答案很好,但在 MyDragListener 中找不到 stopself()...
    • stopself() 在 MyDragListener 中找不到我没有得到这个> 你不能调用这个方法吗?
    • 是的...... MyDragListener 中没有 stopself 方法,因为它不扩展 Service ..... @Brontok
    • 是的... stopself() 只能在服务内部使用。我在想的是在 mydraglistener 类中有一个 stopself() ,或者如果他们是一种知道侦听器是否已经完成然后在服务本身上 stopself() 的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多