2016-05-30 6 views
2

Итак, у меня есть код, который прослушивает перетаскивание ImageView, но он только прослушивает последний, и я хочу, чтобы он слушал их все. Проблема в том, что ImageViews создаются динамически, и все они имеют одно и то же имя, поэтому оно применяется только к последнему.Применить OnLongClickListener к нескольким изображениям с тем же именем

Вот ImageView создания кода:

public ImageView getCardView(String Card) { 

     imageView = new ImageView(this); 

     switch (Card) { 
      case "ace-clubs": 
       imageView.setImageResource(R.drawable.black_joker); 
       imageView.setId(Integer.valueOf(CardId)); 
       break; 
      case "ace-diamonds": 
       imageView.setImageResource(R.drawable.ace_of_diamonds); 
       imageView.setId(Integer.valueOf(CardId)); 
       break; 

      case "ace-hearts": 
       imageView.setImageResource(R.drawable.ace_of_hearts); 
       imageView.setId(Integer.valueOf(CardId)); 
       break; 
     } 

     CardId++; 

     final float scale = getResources().getDisplayMetrics().density; 
     int padding_5dp = (int) (5 * scale + 0.5f); 
     int Height = (int) (100 * scale + 0.5f); 
     int Width = (int) (60 * scale + 0.5f); 


     imageView.setBackgroundColor(Color.WHITE); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Width, Height); 
     imageView.setLayoutParams(params); 
     imageView.setPadding(2, 0, 2, 0); 
     params.rightMargin = 8; 
     params.leftMargin = 8; 

     return imageView; 

    } 

А вот образ прослушивает, которые применяются только к последней ImageView с именем:

imageView.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       ClipData.Item item = new ClipData.Item((CharSequence)v.getTag()); 
       String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN}; 

       ClipData dragData = new ClipData(v.getTag().toString(),mimeTypes, item); 
       View.DragShadowBuilder myShadow = new View.DragShadowBuilder(imageView); 

       v.startDrag(dragData,myShadow,null,0); 
       return true; 
      } 
     }); 

     imageView.setOnDragListener(new View.OnDragListener() { 
      @Override 
      public boolean onDrag(View v, DragEvent event) { 
       switch(event.getAction()) 
       { 
        case DragEvent.ACTION_DRAG_STARTED: 
         layoutParams = (RelativeLayout.LayoutParams)v.getLayoutParams(); 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_STARTED"); 

         // Do nothing 
         break; 

        case DragEvent.ACTION_DRAG_ENTERED: 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_ENTERED"); 
         int x_cord = (int) event.getX(); 
         int y_cord = (int) event.getY(); 
         break; 

        case DragEvent.ACTION_DRAG_EXITED : 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_EXITED"); 
         x_cord = (int) event.getX(); 
         y_cord = (int) event.getY(); 
         layoutParams.leftMargin = x_cord; 
         layoutParams.topMargin = y_cord; 
         v.setLayoutParams(layoutParams); 
         break; 

        case DragEvent.ACTION_DRAG_LOCATION : 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_LOCATION"); 
         x_cord = (int) event.getX(); 
         y_cord = (int) event.getY(); 
         break; 

        case DragEvent.ACTION_DRAG_ENDED : 
         Log.d(msg, "Action is DragEvent.ACTION_DRAG_ENDED"); 

         // Do nothing 
         break; 

        case DragEvent.ACTION_DROP: 
         Log.d(msg, "ACTION_DROP event"); 

         // Do nothing 
         break; 
        default: break; 
       } 
       return true; 
      } 
     }); 

     imageView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        ClipData data = ClipData.newPlainText("", ""); 
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(chosenCards); 

        imageView.startDrag(data, shadowBuilder, imageView, 0); 
        imageView.setVisibility(View.INVISIBLE); 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
     }); 

Спасибо :)

ответ

1

I на 100% уверен, чтобы понять ваш вопрос, но вы должны отслеживать CardId последнего ImageView.

+0

Я не понимаю ... пожалуйста объяснить –

+1

@YudiMoszkowski Я думаю, что лучший способ решить проблему, чтобы удалить объект OnLongClickListener из предыдущего обзора и добавить его к новому ImageView. 'частный слушатель OnLongClickListener; ... lastImageView.setOnLongClickListener (null); newImageView.setOnLongClickListener (слушатель) // который станет последнимImageView'. –