Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在拖动时获取视图&;安卓系统?_Android_Drag And Drop - Fatal编程技术网

Android 如何在拖动时获取视图&;安卓系统?

Android 如何在拖动时获取视图&;安卓系统?,android,drag-and-drop,Android,Drag And Drop,我已经在我的应用程序中实现了拖放功能。我有四个textview&我拖放。但是我想知道哪个textview被拖放?我想知道哪个textview是拖放目标,哪个textview被我代码中指定的名字拖动 下面是代码 初始化视图的代码 public void initView() { p_one = (TextView) findViewById(R.id.tgoal_tvone); p_two = (TextView) findViewById(R.id.tgoal_tvtwo);

我已经在我的应用程序中实现了拖放功能。我有四个textview&我拖放。但是我想知道哪个textview被拖放?我想知道哪个textview是拖放目标,哪个textview被我代码中指定的名字拖动

下面是代码

初始化视图的代码

public void initView()

{
    p_one = (TextView) findViewById(R.id.tgoal_tvone);
    p_two = (TextView) findViewById(R.id.tgoal_tvtwo);
    p_three = (TextView) findViewById(R.id.tgoal_tvthree);
    p_four = (TextView) findViewById(R.id.tgoal_tvfour);
    query = (ImageView) findViewById(R.id.tgoal_img_query);
    tv_contentOne=(TextView)findViewById(R.id.tgoal_tvoneContent);
    tv_contentTwo=(TextView)findViewById(R.id.tgoal_tvtwoContent);
    tv_contentThree=(TextView)findViewById(R.id.tgoal_tvthreeContent);
    tvContentFour=(TextView)findViewById(R.id.tgoal_tvfourContent);

    query.setOnClickListener(this);


    //set touch listeners
    tv_contentOne.setOnTouchListener(new ChoiceTouchListener());
    tv_contentTwo.setOnTouchListener(new ChoiceTouchListener());
    tv_contentThree.setOnTouchListener(new ChoiceTouchListener());
    tvContentFour.setOnTouchListener(new ChoiceTouchListener());

    //set drag listeners
    tv_contentOne.setOnDragListener(new ChoiceDragListener());
    tv_contentTwo.setOnDragListener(new ChoiceDragListener());
    tv_contentThree.setOnDragListener(new ChoiceDragListener());
    tvContentFour.setOnDragListener(new ChoiceDragListener());



    /**set up the action bar**/

    ActionBar bar = getActionBar();
    bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099CC")));
    bar.setTitle(getResources().getString(R.string.tgoal_header));
    bar.setDisplayHomeAsUpEnabled(true);
    bar.setHomeButtonEnabled(true);

}
获取下拉视图的代码

class ChoiceDragListener implements OnDragListener
    {
        int count=0;

        @Override
        public boolean onDrag(View v, DragEvent event) {
            // TODO Auto-generated method stub
            View dragView = (View) event.getLocalState();
            switch (event.getAction()) 
            {

            case DragEvent.ACTION_DRAG_STARTED:
                //no action necessary

                break;
            case DragEvent.ACTION_DRAG_ENTERED:
                //no action necessary
                break;
            case DragEvent.ACTION_DRAG_EXITED:        
                //no action necessary
                break;
            case DragEvent.ACTION_DROP:

                //handle the dragged view being dropped over a drop view
                //handle the dragged view being dropped over a target view
                View view = (View) event.getLocalState();
                //stop displaying the view where it was before it was dragged
                //view dragged item is being dropped on
                TextView dropTarget = (TextView) v;
                //view being dragged and dropped
                TextView dropped = (TextView) view;
                String droppedTarget=dropTarget.getText().toString();
                 dropTarget.setText(dropped.getText());
                 dropped.setText(droppedTarget);

                //make it bold to highlight the fact that an item has been dropped
                dropTarget.setTypeface(Typeface.DEFAULT_BOLD);
                dropTarget.setBackgroundColor(getResources().getColor(R.color.papya_orange));
                Log.i("log", "TV Dropped");
                if(dropTarget==p_one)
                {
                    Log.i("log", "Drop View is First TextView");

                }


                break;
            case DragEvent.ACTION_DRAG_ENDED:
                //no action necessary
                break;
            default:
                break;
        }
            return true;
        }

    }

很简单,只需在onDrag()回调中跟踪视图即可:

private int mDragResourceId;//DECLARE THIS FIELD

    @Override
    public boolean onDrag(View v, DragEvent event) {
        // TODO Auto-generated method stub
        View dragView = (View) event.getLocalState();
        //ADD THIS LINE
        mDragResoruceId = dragView.getId();
//REST OF YOUR CODE 
    }
然后,您可以使用以下两种方法来跟踪上次拖动的视图,即通过运行时资源ID和设计时资源名称:

private int getDragResId(){
   return mDragResourceId;
}

private String getDragResName(){
   return getResources().getResourceName(getDragResId());
}

祝你好运。

没错。但是在调用v.startDrag(dragData,myShadow,v,0)时只需要一个注释;不要忘记在localState参数中传递需要拖动的v(视图)。我曾经将其传递为null,所以当我尝试您的答案时,它崩溃了,直到我意识到应该使用startDrag()传递它。