問題タブ [fragmentpageradapter]
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 - ViewPager の別のフラグメントからフラグメント内のリストビューを更新/更新できません
次が分からなくて困っています。
私が持っているもの:ビューページャーとその中にいくつかのページがあります。この質問では、それらのうちの 2 つだけが重要です。それらを Fragment1 と Fragment2 と呼びましょう。それらは互いに隣り合っています。Fragment1 には、インターネット (外部データベース) からのデータで満たされたリストビューが含まれています。Fragment2 には単純なボタンが含まれています。
私の目標: Fragment2 のボタンをクリックすると、新しいアイテムが外部データベースに追加されます。この新しいアイテムで Fragment1 のリストビューを更新/更新したいと思います。
私のnotifyDataChanged()
場合は機能しませんが、これまでのところ、すべてのページが再インスタンス化されると確信していました..私の問題をできるだけ明確な方法で紹介するので、私が持っているコードを見てみましょう。これが私のViewPager
アダプターです:
Fragment1 onCreateView() (まもなく):
とアダプターを作成しViewPager
、アダプターを設定してViewPager
から、ビューページャーに Main クラスのフラグメントを入力します。この後、2 つのフラグメントで完全に機能する ViewPager を作成します。
Fragment1 には、すべてのリスト項目にいくつかのテキストビューを含むリストビューがあります。ロードは完全に機能します。 を作成し、ArrayLists
それらのリストに外部データベースからのデータを入力します。読み込みが完了したら、リストビューにこれらの大量のデータを入力します。Fragment 2でボタンをクリックすると、そのリストビューを更新して、外部データベースからのデータを使用してリストビューに新しい行を作成する必要があります。(もちろん、データベースへの書き込みは機能します)
私の推測では、ArrayLists を更新しないか、Fragment1 を再インスタンス化しない可能性があるため、getDataFromSQL() メソッドは、アプリケーションを終了して再度起動するか、ViewPager でスワイプしすぎて Fragment1 が切り離された場合にのみ回転しません。そのため、Fragment1 を更新または更新できません。誰かがこの質問で助けてくれますか?
編集
Fragment2にメッセージを配信してそれ自体を更新することで、なんとかそれを実現しました。しかし、それが良い解決策であるかどうかはわかりません。より良い方法はありません。つまり、何らかの形でフラグメント全体を更新するだけです。
解決
さて、それは私の怠惰だったに違いないと思いますが、今は解決しました。フラグメントを別のフラグメントから更新したい、またはフラグメント間の接続を作成したいすべての人のために、適切なアプローチを説明します。
ホルダーアクティビティを介してフラグメント間の通信を支援する独自のリスナーを実装する必要があります。これはhttp://developer.android.com/training/basics/fragments/communicating.htmlにあります。非常にシンプルで便利です。
フラグメントを取得する必要がありますが、これも簡単です。ViewPager からフラグメントを取得するこれらの Q はいくつかの受け入れ可能な方法を提供します。私はその
SpareArray
解決策を使用しました。
とにかく助けてくれてありがとう!
java - FragmentPagerAdapter を使用して異なるコンテンツのタブを作成するにはどうすればよいですか?
Androidマーケットのようにスワイプできるさまざまなタブが必要です。各タブは 1 つのフラグメントを使用し、それに対して 1 つのメソッドを使用する必要があります。
これは私の FragmentPagerAdapter クラスです:
そして、フラグメントの種類/タブごとに 3 つのクラスがあります。
各 Fragment はカスタマイズ可能である必要があるため、3 つのクラスがあります。
それにもかかわらず、アプリは getItem メソッドでクラッシュします。何か案は?ありがとうございました!
編集: 完全な MainActivity.java:
android - FragmentPagerAdapter はページ タイトルを必要としません
フラグメント ページにページ タイトルを付けたくないのですが、getPageTitle セグメントを削除するか、文字列を "" に設定すると、各フラグメントの上部にスペースができてしまいます。
何かアドバイス?
android - java.lang.InstantiationException: クラスをインスタンス化できません...空のコンストラクターがありません
私と同様の質問を持つトピックを見つけましたが、今のところ探している答えが見つかりません。私のアプリケーションは、各タブにフラグメントを持つ (FragmentPagerAdapter の子)FragmentActivity
をホストする で構成されています。ViewPagerAdapter
私の ViewPagerAdapter は、親アクティビティの OnCreateView 関数でインスタンス化されます
ViewPagerAdapter は最低限必要なメソッド getItem
を実装しgetCount
、getItemPosition
MygetItem
は、位置ごとに異なる Fragment を初期化します。
への呼び出しsetRetainInstance(true)
は、私が直面している問題を解決するために追加されましたが、どちらも助けにはなりませんでした。
最後に、上記の各フラグメントは、アプリケーション コンテキストを引数として public static newInstance() 関数を実装します。たとえば、FragmentNearbyOffers には次のものが含まれます。
もう 1 つの重要な情報は、親アクティビティが singleInstance として宣言されていることです。いくつかの理由により、これをこのように維持したいと考えています。
すべて正常に動作しますが、アクティビティがしばらくの間バックグラウンドにあり、TaskManager を介して、またはアプリケーション アイコンをクリックしてアクティビティに戻ろうとすると、例外が発生します。
クラス名は間違いなく存在し、公開されており、空のコンストラクターを持っているようなコンストラクターはありません.空のコンストラクターを明示的に追加しましたが、呼び出されていることを確認しましたが、これも役に立ちませんでした。
ここのさまざまな投稿から私が理解したのは、Android がアプリケーションを再開するときに、元のアクティビティにリンクされていないフラグメントの新しいインスタンスを FragmentPagerAdapter に配置していることです。 nullを受け取ります..しかし、空のコンストラクターがあるため、この例外が発生する理由がわかりません...実行がアクティビティのonCreateに入り、すぐに入るため、これを修正する場所さえわかりませんフラグメントの空のコンストラクターと例外が発生します..フラグメントの他のメソッド、つまりonAttach、onCreateなどはまったく呼び出されません..したがって、フラグメントを構築するときに実際にクラッシュしているようです..
役立つ場合に備えて、取得しているスタックトレース全体を添付しています。
android - ViewPager の Fragment、現在の Fragment インスタンスを取得できません
クラス FragmentParentNewsDetail.java には、ViewPager があり、FragmentPagerAdapter を使用して、次のように各ページに同じ Fragment を設定します。
FragmentNewsDetail.java には、パブリック メソッドがあります。
次に、 FragmentNewsDetail.java の getNewsTitle() メソッドを次のように呼び出します。
しかし、getNewsTitle() は常に "" を返すので、それについて混乱しています。
以下の方法で修正しました。
from: FragmentPagerAdapter 使用時に既存のフラグメントを取得する方法
どうもありがとう!
android - FragmentPagerAdapter のインテントを使用して新しいアクティビティを開く
Tile Strip の下にある新しいアクティビティ (List Activity) List.java を開きたい
onCreateViewでインテントを使用する方法またはonCreateView にリストを追加する方法
main.java は、Eclipse でのスワイプ ビューとタイル ストリップのサンプルです。
Main.java :
List.Java :
android - FragmentPagerAdapter と FragmentStatePagerAdapter
私は現在、PagerAdapter のどの実装を使用すべきかを考えています。私はそれらの両方に関連するジレンマを持っています。これらが何であるかをお見せしましょう。
1# FragmentPagerAdapter
正常に動作します。以前のインスタンスが利用できない場合はフラグメントの新しいインスタンスを作成し、そのような機会がある場合は以前のフラグメントを取得します。
私は最近 StackOverflow で、メソッドPagerAdapter's
getItem()
method はフラグメントを作成する必要がある場合にのみ呼び出されることを読みましたが、何度も呼び出され、このメソッドの本体内で新しいインスタンスの作成と古いインスタンスの取得を処理する必要がありました。
BUT - コールバック メソッドとライフサイクル メソッドはほとんど呼び出されません。たとえば、私はonSaveInstanceState
呼ばれることができません。したがって、フラグメントの状態を保存する方法はありません-もちろんSharedPreferences
、または他の何かを使用できますが、コールバックメソッドを使用したかったのです。それを達成する方法はありますか?
2# FragmentStatePagerAdapter
完全に機能し、ViewPager
保持するすべてのフラグメントの状態を保存します。
しかし - これPagerAdapter
は常に新しいフラグメントを作成します。コンストラクタ内で確認しました。
非効率じゃないですか?Romain Guy が Google I/O の資料で、新しいものを作成するのは効率的ではないと言っているのをViews
見たことがありViews
ます。したがって、ページ間の切り替えは非常に似ています-多くは新しい-フラグメントはある種のListView
convertView
View
Views
View
どちらもOverriding メソッドPagerAdapters
でトリックを試みdestroyItem()
ましたが、まったく機能しませんでした。
そして、これが私の質問です。
私は何をすべきか?
SharedPreferences
オプション #1を使用するFragmentPagerAdapter
か、オプション #2を使用する必要がありますFragmentStatePagerAdapter
か?
これらのアダプター内で何か間違ったことをして、期待どおりに動作しない可能性はありますか?
以下は、「読み取り可能な」部分に分割された私のコードです
PagerAdapter パート 1:
PagerAdapter パート 2:
PagerAdapter パート 3:
ViewPager コード:
android - FragmentPagerAdapter を使用して ViewPager からすべてのフラグメントを削除する方法
をViewPager
使用してフォト ギャラリーとして使用する がありFragmentPagerAdapter
ます。
にはViewPager
特別なコードはありません。
は、位置に対応する写真FragmentPagerAdapter::getIem(int position)
を含む新しい Fragment を返します。ImageView
以前に設定された画像のリストがあります。
別のギャラリーを表示できるサイド メニューがありますが、写真を新しい写真セットに更新できません。FragmentPagerAdapter
and 呼び出しでイメージのリストを変更しますnotifyDataSetChanged()
が、フラグメントは再作成されないため、更新されません。
SO で見つかったいくつかのソリューションを試しましたが、成功しませんでした (フラグメントは更新されません)。
POSITION_NONE
から戻るFragmentPagerAdapter::getItemPosition(Object object)
ImageView
内部を更新しようとしてFragment
います:どこでそれを行うことができるのか本当にわかりません。- 設定
ViewPager::setOffscreenPageLimit(0)
- 設定
ViewPager::setAdapter(null)
私が望むのは、それが元に戻ることFragmentPagerAdapter::getIem(int position)
ですが、FragmentManager
.
自分で作るしか方法はありませPagerAdapter
んか?
android - Android FragmentPagerAdapter findViewById
FragmentPagerAdapter を 3 ページでロードするレイアウトがあります。
シンプルな問題です。
ここで何か見逃しましたか?
従うべき良い例はありますか?
前もって感謝します。