2015-03-07 5 views
5

я реализовал функцию перетаскивания & в моих app.I имеет четыре TextView & я перетащить & drop.But я хочу знать, какой 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; 
     } 

    } 

ответ

4

Простой, просто следить за своими мнениями в 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 
    } 

Затем вы можете использовать эти два метода для отслеживания вашего последнего тащили View, как по времени выполнения ID и имя ресурса во время разработки:

private int getDragResId(){ 
    return mDragResourceId; 
} 

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

Good Luck.

+2

Правильно. Но просто примечание при вызове v.startDrag (dragData, myShadow, v, 0); не забудьте передать v (view), которые нужно перетащить в параметр localState. Я использовал, чтобы передать его null, поэтому, когда я попробовал ваш ответ, он разбился, пока не понял, что его нужно передать с помощью startDrag(). – Amt87

Смежные вопросы