問題タブ [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.

0 投票する
1 に答える
9872 参照

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にメッセージを配信してそれ自体を更新することで、なんとかそれを実現しました。しかし、それが良い解決策であるかどうかはわかりません。より良い方法はありません。つまり、何らかの形でフラグメント全体を更新するだけです。

解決

さて、それは私の怠惰だったに違いないと思いますが、今は解決しました。フラグメントを別のフラグメントから更新したい、またはフラグメント間の接続を作成したいすべての人のために、適切なアプローチを説明します。

  1. ホルダーアクティビティを介してフラグメント間の通信を支援する独自のリスナーを実装する必要があります。これはhttp://developer.android.com/training/basics/fragments/communicating.htmlにあります。非常にシンプルで便利です。

  2. フラグメントを取得する必要がありますが、これも簡単です。ViewPager からフラグメントを取得するこれらの Q はいくつかの受け入れ可能な方法を提供します。私はそのSpareArray解決策を使用しました。

とにかく助けてくれてありがとう!

0 投票する
4 に答える
62990 参照

java - FragmentPagerAdapter を使用して異なるコンテンツのタブを作成するにはどうすればよいですか?

Androidマーケットのようにスワイプできるさまざまなタブが必要です。各タブは 1 つのフラグメントを使用し、それに対して 1 つのメソッドを使用する必要があります。

これは私の FragmentPagerAdapter クラスです:

そして、フラグメントの種類/タブごとに 3 つのクラスがあります。

各 Fragment はカスタマイズ可能である必要があるため、3 つのクラスがあります。

それにもかかわらず、アプリは getItem メソッドでクラッシュします。何か案は?ありがとうございました!

編集: 完全な MainActivity.java:

0 投票する
1 に答える
822 参照

android - FragmentPagerAdapter はページ タイトルを必要としません

フラグメント ページにページ タイトルを付けたくないのですが、getPageTitle セグメントを削除するか、文字列を "" に設定すると、各フラグメントの上部にスペースができてしまいます。

何かアドバイス?

0 投票する
2 に答える
13162 参照

android - java.lang.InstantiationException: クラスをインスタンス化できません...空のコンストラクターがありません

私と同様の質問を持つトピックを見つけましたが、今のところ探している答えが見つかりません。私のアプリケーションは、各タブにフラグメントを持つ (FragmentPagerAdapter の子)FragmentActivityをホストする で構成されています。ViewPagerAdapter私の ViewPagerAdapter は、親アクティビティの OnCreateView 関数でインスタンス化されます

ViewPagerAdapter は最低限必要なメソッド getItemを実装しgetCountgetItemPosition

MygetItemは、位置ごとに異なる Fragment を初期化します。

への呼び出しsetRetainInstance(true)は、私が直面している問題を解決するために追加されましたが、どちらも助けにはなりませんでした。

最後に、上記の各フラグメントは、アプリケーション コンテキストを引数として public static newInstance() 関数を実装します。たとえば、FragmentNearbyOffers には次のものが含まれます。

もう 1 つの重要な情報は、親アクティビティが singleInstance として宣言されていることです。いくつかの理由により、これをこのように維持したいと考えています。

すべて正常に動作しますが、アクティビティがしばらくの間バックグラウンドにあり、TaskManager を介して、またはアプリケーション アイコンをクリックしてアクティビティに戻ろうとすると、例外が発生します。

クラス名は間違いなく存在し、公開されており、空のコンストラクターを持っているようなコンストラクターはありません.空のコンストラクターを明示的に追加しましたが、呼び出されていることを確認しましたが、これも役に立ちませんでした。

ここのさまざまな投稿から私が理解したのは、Android がアプリケーションを再開するときに、元のアクティビティにリンクされていないフラグメントの新しいインスタンスを FragmentPagerAdapter に配置していることです。 nullを受け取ります..しかし、空のコンストラクターがあるため、この例外が発生する理由がわかりません...実行がアクティビティのonCreateに入り、すぐに入るため、これを修正する場所さえわかりませんフラグメントの空のコンストラクターと例外が発生します..フラグメントの他のメソッド、つまりonAttach、onCreateなどはまったく呼び出されません..したがって、フラグメントを構築するときに実際にクラッシュしているようです..

役立つ場合に備えて、取得しているスタックトレース全体を添付しています。

0 投票する
0 に答える
2769 参照

android - ViewPager の Fragment、現在の Fragment インスタンスを取得できません

クラス FragmentParentNewsDetail.java には、ViewPager があり、FragmentPagerAdapter を使用して、次のように各ページに同じ Fragment を設定します。

FragmentNewsDetail.java には、パブリック メソッドがあります。

次に、 FragmentNewsDetail.java の getNewsTitle() メソッドを次のように呼び出します。

しかし、getNewsTitle() は常に "" を返すので、それについて混乱しています。

以下の方法で修正しました。

from: FragmentPagerAdapter 使用時に既存のフラグメントを取得する方法

どうもありがとう!

0 投票する
1 に答える
2213 参照

android - FragmentPagerAdapter のインテントを使用して新しいアクティビティを開く

Tile Strip の下にある新しいアクティビティ (List Activity) List.java を開きたい

onCreateViewでインテントを使用する方法またはonCreateView にリストを追加する方法

main.java は、Eclipse でのスワイプ ビューとタイル ストリップのサンプルです。

Main.java :

List.Java :

0 投票する
1 に答える
9957 参照

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ます。したがって、ページ間の切り替えは非常に似ています-多くは新しい-フラグメントはある種のListViewconvertViewViewViewsView

どちらもOverriding メソッドPagerAdaptersでトリックを試みdestroyItem()ましたが、まったく機能しませんでした。

そして、これが私の質問です。

私は何をすべきか?

SharedPreferencesオプション #1を使用するFragmentPagerAdapterか、オプション #2を使用する必要がありますFragmentStatePagerAdapterか?

これらのアダプター内で何か間違ったことをして、期待どおりに動作しない可能性はありますか?

以下は、「読み取り可能な」部分に分割された私のコードです

PagerAdapter パート 1:

PagerAdapter パート 2:

PagerAdapter パート 3:

ViewPager コード:

0 投票する
0 に答える
1350 参照

android - FragmentPagerAdapter を使用して ViewPager からすべてのフラグメントを削除する方法

ViewPager使用してフォト ギャラリーとして使用する がありFragmentPagerAdapterます。
にはViewPager特別なコードはありません。
は、位置に対応する写真FragmentPagerAdapter::getIem(int position)を含む新しい Fragment を返します。ImageView以前に設定された画像のリストがあります。
別のギャラリーを表示できるサイド メニューがありますが、写真を新しい写真セットに更新できません。FragmentPagerAdapterand 呼び出しでイメージのリストを変更しますnotifyDataSetChanged()が、フラグメントは再作成されないため、更新されません。

SO で見つかったいくつかのソリューションを試しましたが、成功しませんでした (フラグメントは更新されません)。

  • POSITION_NONEから戻るFragmentPagerAdapter::getItemPosition(Object object)
  • ImageView内部を更新しようとしてFragmentいます:どこでそれを行うことができるのか本当にわかりません。
  • 設定ViewPager::setOffscreenPageLimit(0)
  • 設定ViewPager::setAdapter(null)

私が望むのは、それが元に戻ることFragmentPagerAdapter::getIem(int position)ですが、FragmentManager.
自分で作るしか方法はありませPagerAdapterんか?

0 投票する
0 に答える
358 参照

android - Android FragmentPagerAdapter findViewById

FragmentPagerAdapter を 3 ページでロードするレイアウトがあります。

シンプルな問題です。

ここで何か見逃しましたか?

従うべき良い例はありますか?

前もって感謝します。