2014年4月15日火曜日

とあるDragAndDrop

ドラッグアンドドロップのやっているところで簡単なテストアプリを作ってみた。
onDragListenerのテストでございます。
やりたいことは、
・レイアウト内にあるViewを他のレイアウトにドラッグアンドドロップする
こんだけ。

で、試しにやってみたところうまくいかなかった。
エラーで、
 E/AndroidRuntime(12379): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

これが出る。何ぞこれ?と思って調べたところ、
Kazzzの日記 Viewの階層を入れ替える
http://d.hatena.ne.jp/Kazzz/20100603/p1
というサイト様で図解が出ていた。

ほむほむ。
親との縁を切れと(違

冗談はさておき、元のparentとの関係を無効(removeView)にして宙ぶらりんにした後、
新しい親に加わえる(addView)。invalidateではだめでした。

最初はアニメーションの関係かなぁと思ったのでpostDelayしてみたりしたがだめでけっこう行き詰ってました。だってview init<うんたらかんたら>とかいうエラーが出たし。
さらにMainActivityの匿名クラスでやってたもんだから、参照がわけわかめになっていた。

そんなわけで、匿名クラスを全部外に出し、やりとりは全て独自インターフェイスにして、必要なものだけActivityのメンバ変数にした。

以下ソース。


0 件のコメント:

コメントを投稿