問題タブ [fragmentstatepageradapter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - FragmentStatePagerAdapter によって作成された Fragment に対して常に null を返す Fragment getView()
私はフラグメントについてたくさん読んできました。null が常に返されたため、フラグメントビューの取得に問題がある他の人を見つけましたが、私の問題は解決されませんでした。私がやろうとしているのは、画像ギャラリーを作成することです。画像ビューを保持するフラグメントがあります。フラグメントを表示するには、android.support.v4.view.ViewPager を使用します。を養うために、ViewPager
私は を使用しandroid.support.v4.app.FragmentStatePagerAdapter
ます。
問題は、すべてがビルドされて画像が表示されたときに、現在表示されている画像をディスクに保存したいということです。したがって、現在のフラグメントのイメージビューを取得する必要がありますが、fragment.getView() は常に null であり、フラグメントに関連付けられているアクティビティも null であり、その理由がわかりません。誰かがここで助けてくれるかどうかを確認するためのコードを次に示します。
これは私のフラグメントです:
そして、これは私のアダプターです:
これがメインのアクティビティです。get のコメントに注目してください。
長いソースで申し訳ありません。できる限りすべてをきれいにしましたが、すべての演奏部分を提示したかったのです。何が起こっているのか誰でも推測できますか?
前もって感謝します。
android - FragmentStatePagerAdapter の使用中にフラグメント ビューを更新する
更新の問題は以前に議論されているようですが、解決策はどれもうまくいきませんでした。
私がやろうとしていること: FragmentStatePagerAdapter を使用しています。アダプターの各位置には、チェスのような外観を持つ線形レイアウトを持つフラグメントが保持され、各セルは CheckedTextView によって表されます。
そして、クリックをリッスンし、セルの以前の選択を削除して新しい選択を行うリスナー。
Whats working: 各フラグメントはすべてのデータ/デフォルト状態で正しくロードされます (フラグメントがリストにロードされている間に計算されます)
セルをクリックすると、保存されたセル リストからすべての状態が正しく取得され、デバッグ中にコード内の状態の変化を確認できます。同時に、セルを表す CheckedTextView に新しい状態を割り当てます。これは次のように設定されます。
問題: 値が正しく保存および割り当てられていても、ビューを更新できず、ビュー内のセルの値が更新されません。
私が試してみたがうまくいかなかったヒント:
2. DestroyItem の Overriden メソッドを追加し、getItem でフラグメントを Map に追加します。
FragmentStatePagerAdapter を使用しているため、これは適切ではないため、この pagerAdapter を使用する目的はすべてなくなります。
3. 無効化の呼び出し: これはこのシナリオには不適切です。リアルタイムの更新が必要です。
4. instantiateItem() 内の setTag() メソッド: この状況では適切ではないと思います。
参照スレッド: アクティビティの再開時に FragmentStatePagerAdapter で画像を更新する
ViewPager PagerAdapter がビューを更新しない
notifyDataSetChanged が ListView の更新に失敗する
私は自分の問題をできるだけ明確に述べようとしましたが、さらに明確にする必要がある場合は、尋ねてください.
お急ぎの回答は大歓迎です、
乾杯
****アップデート*****
デフォルトの ViewPager の代わりに、ViewPagerIndicator を使用しています。
android - ViewPager からフラグメントを削除できません。なぜですか?
何かが欠けているに違いありませんが、からフラグメントを削除できませんViewPager
。ページのタイトルを次のように保存しますArrayList
。
の一部ViewPagerActivity.java
(FragmentActivity
主なアクティビティ):
のボタンをクリックし111
てフラグメントを削除したいフラグメント ( ) があります。( で始まるので、は 4 番目のフラグメントです)。555
111
0
555
の一部fragment111.java
( はFragment
):
POSITION_NONE
メソッドをオーバーライドすることで見逃してしまう人もいますgetItemPosition()
。
私のアダプタークラス:
私は使用してFragmentStatePagerAdapter
おり、notifyDataSetChanged()
うまく動作します(aの状態を更新すると、動作するCheckBox
ことがわかります)。このフラグメントを から削除するにはどうすればよいViewPager
ですか?
前もって感謝します!
android - 画面の向きが変更された後、ViewPager のアダプターからアイテムを破棄する
ViewPager
そのため、画面の向きが変更された後、 から 1 ページを破棄 (削除) することに問題があります。次の行で問題を説明してみます。
FragmentStatePagerAdapter
のアダプターとViewPager
、エンドレス ビュー ページャーがどのように機能するかを説明する小さなインターフェイスを使用しています。その背後にある考え方は、最後に到達するまで右にスクロールできるということですViewPager
。API 呼び出しからさらに結果をロードできる場合は、結果が来るまで進行状況ページが表示されます。
ここまでは問題ありませんでしたが、ここで問題が発生します。このロード プロセス中に画面を回転させた場合 (これは、基本的に である API 呼び出しには影響しませんAsyncTask
)、呼び出しが戻ると、アプリがクラッシュし、次の例外が発生します。
ライブラリのコードを少し掘り下げた後mIndex
、フラグメントのデータ フィールドがこの場合よりも少ない0
ようで、これによりその例外が発生します。
ページャー アダプターのコードは次のとおりです。
以下のonPageSelected()
コールバックは、基本的に必要に応じて API 呼び出しを開始します。
ここで、結果を配信した後に API 呼び出しが何を行うかについても言及する価値があります。コールバックは次のとおりです。
さて、setData()
メソッドが を呼び出すのでnotifiyDataSetChanged()
、これは現在配列getItemPosition()
にあるフラグメントに対してを呼び出します。currentFragments
もちろん、POSITION_NONE
このページを削除したいので、進行状況要素に対してはそれが返されるので、これは基本的にdestroyItem()
からコールバックを呼び出しますPagedSingleDataAdapter
。画面を回転させなければすべて正常に動作しますが、前述のように、progress 要素が表示されていて API 呼び出しがまだ終了していないときに画面を回転させるとdestroyItem()
、アクティビティの再起動後にコールバックが呼び出されます。
ViewPager
アクティビティではなく、別のフラグメントで をOutterFragment
ホストしていると言うべきかもしれませんViewPager
。pagerAdapter
のonActivityCreated()
コールバックで をインスタンス化し、OutterFragment
を使用してsetRetainInstance(true)
、画面が回転してpagerAdapter
も が同じままになるようにします (何も変更しないでください)。コードは次のとおりです。
今要約すると、問題は次のとおりです。
ViewPager
インスタンス化され、アクティビティが破棄されて再作成された後 (画面の向きが変更された)から進行状況要素を削除しようとすると、上記の例外が発生します (pagerAdapter
同じままなので、その中のすべても同じままで、参照など...が破棄されていないOutterFragment
ホストはpagerAdapter
、アクティビティから切り離されてから再接続されるだけであるため)。おそらくフラグメントマネージャーで何かが起こるのでしょうが、私は本当に何を知りません.
私がすでに試したこと:
別の手法を使用して進行中のフラグメントを削除しようとしました。つまり
onTaskSuccess()
、フラグメント マネージャーからフラグメントを削除しようとしていたコールバックで、うまくいきませんでした。また、進行状況要素をフラグメント マネージャーから完全に削除するのではなく、非表示にしようとしました。ビューがもう存在しないため、これは 50% 機能しましたが、空のページがあったため、実際に探しているものではありません。
また、画面の向きが変更された後、フラグメント マネージャーに を (再) 接続しようとしまし
progressFragment
たが、これも機能しませんでした。また、アクティビティが再作成された後、進行状況フラグメントを削除してフラグメントマネージャーに再度追加しようとしましたが、機能しませんでした。
destroyItem()
コールバックから手動でを呼び出そうとしましたonTaskSuccess()
が (これは本当に、本当に醜いです)、機能しませんでした。
とても長い投稿で申し訳ありませんが、皆さんが理解できるように、問題をできる限り説明しようとしていました.
任意のソリューション、推奨事項は大歓迎です。
ありがとう!
更新: 解決策が見つかっ たため、これにはしばらく時間がかかりました。問題は、progress フラグメントで destroyItem() コールバックが 2 回呼び出されることでした。それが例外の理由です。私が見つけた解決策は次のとおりです。API呼び出しが終了したかどうかを追跡し続け、この場合は以下のコードで進行中のフラグメントを破棄します。
この apiCallFinished は、アダプタのコンストラクタで false に設定され、onTaskSuccess()
コールバックで true に設定されます。そして、それは本当にうまくいきます!
android - ScreenSlidePageAdapter 内の Fragment 内の Android EditText フォーカス
【サポートライブラリの利用】
複数の が一度に表示される myEditText
内にある a の内部を使用しようとした場合。Fragment
ScreenSlidePagerAdapter
Fragment
Fragment
リストの 2 番目にはEditText
. Android 4.1 & 4.2 では問題なく動作します。Android 2.3.6 (他のバージョンについては不明) では、 をタップするEditText
とオンスクリーン キーボードが表示されますが、EditText
. が「現在」と見なさScreenSlidePagerAdapter
れるように内をドラッグすると、は正しく動作します。Fragment
EditText
Fragment
すべてを動的に生成する必要があり、表示される の数はさまざまな基準に基づいて変化する可能性があるため、固定レイアウトは受け入れられません。
ハードコーディングせずに正しく動作させる方法についてのアイデアはありますか?
android - FragmentStatePagerAdapter のフラグメント内のテキストビューのテキストを動的に設定する方法
彼が作成されたとき(またはページがロードされたとき)に、viewPagerのFragmentStateAdapterのフラグメントにTextViewのsetTextが必要です。私は setOnPageChangeListener でテストしていますが、うまくいきません。以下のアダプタと、setOnPageChangeListener を使用して 2 つの方法を試した方法を説明します (フラグメントの作成時にフィールドを初期化できれば、かなりうまくいきます)。
mytest :
ViewPagerAdapterBis.java
ViewPageAdapterObject.java
java - FragmentStatePagerAdapter で (最後のフラグメントから最初に) ループする方法
ビュー間でスワイプするために FragmentStatePagerAdapter を拡張するこのクラスを作成しました。ここで、最後のフラグメントの後にスワイプすると最初のフラグメントが表示されるように、スワイプ リストを円形にする必要があります。それを適切に行う方法が見つかりませんでした。
アダプターのコードは次のとおりです。
}
android - FragmentStatePagerAdapter によって入力された ViewPager からすべてのフラグメントを削除します
FragmentStatePagerAdapterを使用してフラグメント(arrayListOfObjectsからのオブジェクトを表す)を取り込んでいるViewPagerがあります。すべてうまくいきます:
フラグメント アダプターは、FragmentStatePagerAdapter を拡張します。
プライマリ アクティビティから、ダイアログをテーマにしたアクティビティを起動します。ここで、ユーザーは新しいお気に入りの場所を追加して、プライマリ アクティビティによって渡されるオブジェクトの配列リストを変更する新しいオブジェクトを作成できます。これは、ダイアログ アクティビティを開始するためのコードです。すべて正常に動作します:
フローティング アクティビティは、オブジェクトを arrayListOfObjects に追加します。
プライマリ アクティビティの onActivityResult で、受信した arraListOfObjects と送信したものを比較します。異なる場合は、viewPager の内容を完全に削除し、新しい arrayListOfObjects で再作成します。これは onActivityResults です:
これは fragmentStateAdapter コードです:
}
問題: しかし、startActivityFor の結果を起動する前に、新しい ArrayListOfObjects が古いものと一緒に追加されます。
viewPager に古いコンテンツを強制的に忘れさせるにはどうすればよいですか? 基本的に、fragmentStateAdapter を使用して、この newArrayListofObjects で viewPager アダプターをリセットしますか?
android - Android ViewPager アダプターが他のページを変更する
FragmentStatePagerAdapter を使用する Viewpager があります。各ページはフラグメントです。私のページには、デフォルトで表示される線形レイアウト (llTags) が含まれています。
ユーザーがページ (フラグメントのメイン レイアウト) をクリックした場合、linearlayout は非表示 (動作) である必要がありますが、他の linearlayout (他のページの llTags) も変更する必要があります。
クリックすると、前と次を除くすべてのページで線形レイアウトの表示が変更されました。これは、アダプターからの getItem が次/前のアイテムに対して再度呼び出されないためです。これらのページに通知するにはどうすればよいですか。
ps: アダプタから可視性を変更するための newInstance メソッドと public void setTagslayoutVisible(boolean) があります。