2017-07-03 68 views
0

下降的項目位置我有一個項目,當項目被拖動它可以在項目的另一個列表視圖被丟棄到一個項目的名單。拖放到列表視圖,如何獲取已於

我已經有項目的ID被拖動,我需要以某種方式找出其在ListView項目的項目滴到這樣我可以從適配器該位置獲取對象。

這是我在這個當前的嘗試:

@Override 
    public boolean onDrag(View v, DragEvent event) { 
     switch (event.getAction()){ 
      case DragEvent.ACTION_DROP:{ 
       ClipData data = event.getClipData(); 
       View droppedView = (View) event.getLocalState(); 
       Integer position = listView.getPositionForView(droppedView); 
       Toast.makeText(getContext(), "ID: " + data.getItemAt(0).getText() + " Pos " + position, Toast.LENGTH_LONG).show(); 
      } 
     } 

     return true; 
    } 

這是不幸的是沒有爲event.getLocalState()返回工作從它最初拖着不在於它被拖到一個視圖。

視圖V似乎是整個應用程序的的FrameLayout所以也沒有用處。

我在想,有可能是我失蹤了的dragEvent內的一些數據,或者是拖放只是不支持的項目拖放到列表視圖?

我相信問題的一部分是,片段本身捕獲拖動,但它沒有傳遞給列表視圖項目,如果有某種方式通過拖動到它可能工作的子視圖。

回答

0

所以在最後我對傳遞向下拖動到ListView想法似乎是有些正確的,在我父母片段我如下:

@Override 
    public boolean onDrag(View v, DragEvent event) { 
     listView.onDragEvent(event); 
     return true; 
    } 

你還需要一拖監聽器添加到ListView控件本身就像這樣:

listView.setOnDragListener(new View.OnDragListener() { 
      @Override 
      public boolean onDrag(View v, DragEvent event) { 
       return true; 
      } 
     }); 

然後是適配器爲ListView內,通過片段作爲構造函數的參數(我相信getCallingActivity()會做這個工作的活動),然後執行以下操作:

view.setOnDragListener(new View.OnDragListener() { 
      @Override 
      public boolean onDrag(View v, DragEvent event) { 
       switch (event.getAction()){ 
        case DragEvent.ACTION_DROP:{ 
         parentFragment.performAction(event, item.getId()); 
        } 
       } 
       return true; 
      } 
     }); 

最終的結果是,你可以得到的項目,你通常會用一個ListView適配器還有的dragEvent你可以用它來抓取ClipData。