2015-08-28 73 views
0

我的總體目標是能夠將一行從RecyclerView拖到我的應用程序中的另一個視圖。爲什麼我的拖放操作在RecyclerView中失敗?

使用帶有LinearLayoutmanager的標準RecyclerView,沒有額外的巨型巨型拖放操作,完美無瑕。然而,當我介紹叫AndroidSwipeLayout使每一行滑動式揭示額外的操作都失敗定製庫,我得到了普遍的錯誤:

08-28 09:59:03.465: I/ViewRootImpl(15310): Reporting drop result: false 

我也可以看到,這是在炒魷魚,DragEvents我接收視圖是ACTION_DRAG_STARTEDACTION_DRAG_ENDED,所有其他事件都被跳過。正如你所看到的我從ACTION_DRAG_STARTED返回true,但這並沒有幫助,我的想法是,自定義庫以某種方式吃我的事件。但我無法確定在哪裏。

這裏是我的OnDragListener:

private class MyDropListener implements View.OnDragListener { 

    @Override 
    public boolean onDrag(View v, DragEvent event) { 
    // Doing some calculations based on event x and y. Not related to the problem. 

    switch (event.getAction()) { 
     case DragEvent.ACTION_DRAG_STARTED: 
     // Some unrelated code, updating how views are displayed 
     return true; 

     case DragEvent.ACTION_DRAG_LOCATION: 
     // Some unrelated code, updating how views are displayed 
     return true; 

     case DragEvent.ACTION_DROP: 
     // Some unrelated code, updating some data and updating how views are displayed 
     return true; 

     case DragEvent.ACTION_DRAG_ENDED: 
     // Some unrelated code, updating how views are displayed 
     return true; 

     case DragEvent.ACTION_DRAG_ENTERED: 
     // Some unrelated code, updating how views are displayed 
     return true; 

     case DragEvent.ACTION_DRAG_EXITED: 
     // Some unrelated code, updating how views are displayed 
     return true; 

     default: 
     return false; 
    } 
    } 
} 

現在我已經嘗試了庫內幾天,但正是我的事件死亡找不到固溶體。有時候我已經設法讓這個下降工作,但這是非常不規律的行爲。

我也做了Github的問題,對於這個問題:

AndroidSwipeLayout - issue #211

我敢肯定,這不是針對這個庫,但如果有太多的手勢檢測爲每去一個問題在列表中查看。我認爲這個圖書館非常出色,我不希望自己寫這個互動。

任何想法或意見,歡迎和讚賞。即使你不知道確切的解決方案。

謝謝。

回答

0

這實際上不是由庫或聽衆引起的,它是由位於相同佈局中的EditText引起的。

它是通過創建一個新的類來實現的,該類繼承了EditText並忽略了dragEvent。

public class EditTextNoDrag extends EditText { 

    public EditTextNoDrag(Context context) { 
    super(context); 
    } 

    public EditTextNoDrag(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    public EditTextNoDrag(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    } 

    public EditTextNoDrag(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
    } 

    @Override 
    public boolean onDragEvent(DragEvent event) { 
    switch (event.getAction()) { 
     case DragEvent.ACTION_DRAG_STARTED: 
     return false; 
     default: 
     return super.onDragEvent(event); 
    } 
    } 
} 

您也可以打開和關閉EditText的可調焦狀態。 看到這個相關的isseu:Prevent drag drop of custom mimetype to EditText