カテゴリー: プログラム途中経過

Fragmentがよくわからない(´・ω・`)

一応、ViewPagerにListFragmentを乗せてListViewのアイテムをクリックすると
音楽再生がされるようになった。回転しても問題ない。

アルバム別とアーティスト別は詳細項目を表示せずに、全ての曲を再生するという形にして
みたが、何かそれはおかしいと気付き、各アルバム、各アーティスト用のフラグメントを
用意してみようと試みる。

だがここで一週間弱はまる…(ヽ’ω`)
そして今も完全には解決しているわけではない…_| ̄|○


色んなサイトを巡って読むのに疲れた…__◯_
ようやくreplaceを使って新しいFragmentを表示出来た(・∀・)と思ったら
前のFragmentが何故か残ったまま……サイトによっては上に来る背景色を
不透明にして下のFragmentのenabledをfalseにするみたいなことが書いて
あって「( ´・ω・)エ?」となる。俺氏はFragmentを理解していない又は勘違いしている
という可能性が高いのだが「なんだこの糞仕様は(´・ω・`)」とがっくり来る。
何かしらの理由があってこういう仕様なんだろうけど。
FragmentStatePagerAdapterを使えばいいのだろうか?
それともsetRetainInstance(true)の絡み?

Android: Replaced Fragment Is Still Visible
T.Yokoyamaのブログ: Support Packageを使ってFragmentを利用する

Fragment#replaceを使わずに一気にFragmentを交換するというのもあってコードを
眺めていたら一旦Fragmentを全部削除して差し替え済みのListを渡す形になっていて
「なんという力業…( ;・´ω・`)ゴクリッ」と思ったが、replace自体が

処理としては、同じ containerViewId に追加されている全ての Fragment に対して remove(Fragment) を呼び、それから add(containerId, fragment, tag) を呼ぶのと同じ
Android FragmentTransaction のまとめ

という形みたいなので、replaceからして力業なんかΣ(゚∀゚;)


というわけでFragment関連のドキュメントを読みすぎてFragment酔いになり、
加えてFragmentManagerのバックスタック?ってアクティビティ内で一つだけ
っぽいのも気になり、何故か「Activityをフリックして切り替えるコードが
確かあったから、複数のFragmentじゃなくて複数のActivityにすれば
FragmentManagerのバックスタックも個別になるんじゃね(・∀・)?
左右の無限ループも可能になるし」と血迷う。

またActivityやGestureDetectorなどを調べたり、コードを移植するのに
長い時間を費やす……___ 

お試しだから決め打ちでいいのに、何故か汎用的にしようとし更に時間を…

具体的にはActivityManagerみたいなクラスを作って、getPackageInfoで
得た文字列を、フリック対象のActivityを指定する為のActivityの
名前(正確にはstartWithで使用するプリフィックス)でふるいにかけて出来た
パッケージ名込の文字列のArrayListを渡して、そのままのArrayListと
lastIndexOf(“.”)で切り分けたActivityの名前のみのArrayListにして、
GestturaDetectorの左(右)へのフリック時にgetLocalClassName()で得た名前を
ActivityManagerへ送ってAcitivity名のArrayListの位置から現在位置と左(右)の
パッケージ名込のAcitivity名を取得して、その名前からClass#forName()で得た
クラスでインテントを作成して左(右)のActivityを起動するという……
なんだか書いていてよくわからなくなってきた…( ´・ω・)

そこまでやってListFagmentを乗っけた ← イマココ


これにはまってて翻訳はDevice Compatibilityまでしか訳せてない…(ヽ’ω`)
全然関係ないけどこのページのCompatibilityは互換性じゃなくて適合性で
訳した方がすっきりしたな。