2017-03-03 13 views
14

RecyclerViewにはItemTouchHelperがあります。 RecyclerViewは2/2グリッドで、ページにヘッダーとフッターがあります。ユーザーがアイテムをピックアップすると、そのアイテムがフッターにカーソルを合わせることができます。しかし、リサイクラビューの他のアイテムをフッターで見ることはできません。ItemTouchHelperドラッグしたアイテムをフラグメントフッタに移動させよう

最初にclipChildrenclipPaddingを追加しようとしましたが、これは、RecyclerViewアイテムが問題のフッターをスクロールアップしていた状況を作り出しました。私はアイテムとbringToFontに標高を追加しようとしましたが、リサイクラビューがフッタの後ろに残っていたために働かなかったので、リサイクラビュー自体にフロントを追加しましたが、再びすべてのアイテムがフッタの前にただドラッグされたもの、誰もこれを解決する方法の他のアイデアを持っていますか?

答えて

0

提案、私のカスタムでTouchHelperCallback私はonMoveメソッドをオーバーライドし、変数のソースとタイプが同じかどうかを確認しませんでした。だから、私が項目をヘッダーの上にドラッグしているときに、項目をその上に置くことができました。私はあなたのリサイクルビューがandroid:clipChildren="false"を持っていることを確認することによって開始するhttps://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf#.jl59rui0l

+0

私は少し混乱しています。私はonMoveをまったく使用していますか?私はドラッグを使用していますが、私はアイテムの位置を移動していません。 私のonMoveはfalseを返します。 あなたのコードは、recyclerviewにないアイテムに対して、recyclerviewからアイテムを移動するのに役立つのはなぜですか? –

+0

申し訳ありませんが、問題が十分に指定されていません。 – deadfish

+0

ご意見ありがとうございます。どうすればより良い問題を特定できますか?あなたは今それを理解していますか?たぶん、それは答えの数が少ない理由でしょうか? –

1

@Override 
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) { 
     //if (source.getItemViewType() != target.getItemViewType()) { 
     // return false; 
     //} 

     // Notify the adapter of the move 
     mAdapter.onItemMove(source.getAdapterPosition(), target.getAdapterPosition()); 
     return true; 
    } 

私から取ったドラッグドロップについてのチュートリアルを変更していません。そうすれば、リサイクルビューをフッターで文字通りに重ねる必要はありません。フッターの上で終わることができ、それでも子供が境界線の外に出ることができます。

静的フッターがある場合は、y軸が現在のアイテムがフッターと交差するまで十分に移動したと判断したときにbringToFrontを呼び出すことができます。その後、範囲外に戻るときや、recyclerviewがまったくスクロールしたときに、フッターを前面に戻してください。しかし、これは特にエラーが起こりやすい。ハックのビット。

編集:

異なるアプローチが完全にドラッグされた項目とrecyclerview(これは、ドロップ部の作業のビットがかかります)との間の接続を切断することで、ステップは、おおよそ次のようになります

- Start dragging item i 
- store a reference to i.getParent() and the view index within its parent 
- i.getParent().removeView(i) //detach the item from the recycler (or create clone) 
- layout.addView(i) //add item onto main layout containing footer, allowing overlap 

- when dropped, use the parent reference and index to reattach the item 
- then work out where the item was released 
+0

あなたの答えをありがとう、私はclipchildren = falseがあります。問題は、移動している子供だけをフッターに置いてほしいということです。子どもたちがスクロールするときにリサイクラーをスクロールしながらフッターに移動したいとは思いません。 –

+0

項目がフッターの上にカーソルを置いて、そのアイテムの前に持って来ることを呼び出すか、またはrecyclerview全体を前面に持って来ることを意味しますか? フッターの下にある他のアイテムが突然飛んでくることが問題です。動くアイテムだけにするのは問題ありません。フロントに持ってきてもフッタの後ろにいます。リサイクルビュー自体が背後にある –

+0

はい私は質問からこれらのポイントをすべて理解していました - 私はリサイクラビューでbringToFrontを呼び出すとフッター上のアイテムが存在しないように短いフッターが1つのアイテムのサイズであると仮定していましたドラッグされたビューだけがフッタをクリッピングするy位置になります。しかし、壊れやすい解決策です。 –

関連する問題