10

私は4つのタブを持つviewpagerを手に入れました..各タブにはフラグメントがあります。私の最初のタブは、[保存] をクリックした後、フォーム (たとえば、ユーザー) を含むフラグメントであり、データがデータベースに挿入されます。私の 2 番目のタブはフォームを含む別のフラグメントですが、最初のタブ (データベースから取得しています) のデータを使用してスピナーにデータを入力します。最初のタブからデータを正常に挿入した後、2 番目のタブでスピナーが空になります。私のdbクエリは2番目のフラグメントのonCreateView()に実装されているため、アプリケーションの開始時に1回だけ呼び出されるため、タブ1とタブ2の間で変更してもonCreateView()またはonResume()さえ開始されません。私にとって興味深いのは、tab4 に移動してから tab2 に戻ると、データが適切にスピナーにあるため、現在のタブから 2 つのタブをスワイプしてフラグメントを更新することです。

編集 psykhi がそのように提案した方法を入れようとしました:

    this.mViewPager.setOffscreenPageLimit(0);
    this.mViewPager.setAdapter(this.mPagerAdapter);
    this.mViewPager.setOnPageChangeListener(this);

しかし、それは私にとってはうまくいきません。何か足りないのですか?

4

6 に答える 6

13

更新:より良い方法があります。こちらをご覧ください:ViewPagerを動的に更新しますか?


Fragment内部にアクセスするのは本当に悪い方法だったので、この回答の内容を削除しますViewPager。より良いアプローチについては、上記のリンクを参照してください。

于 2013-02-08T13:37:56.600 に答える
2

フラグメント メソッドの最初のオーバーライド

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser){
        actionView();//call the method to be refreshed
    }
    else{
        //no
    }

}
于 2016-11-23T11:50:37.680 に答える
2

これは、ビューページャーが「RAM に保持する」フラグメントの数を指定できるためです ( setOffScreenPageLimit () : デフォルトは 1 だと思います)。したがって、2 番目のフラグメントはリロードされません。タブ 3 または 4 に移動すると、最初の 2 つのフラグメントが削除され、戻ってきたときに再作成されます。

フラグメントを更新するには、さまざまな方法があります。独自のリスナー インターフェイスを実装して更新のタイミングを伝えるか、コンテンツを更新するために実装するメソッドを呼び出すだけです。

于 2013-02-08T13:02:57.983 に答える
0

わかりました返信が遅れる可能性があります。将来的には他の人を助けるかもしれません。そのため、最近、3番目のタブをクリックしたときにのみ表示されていたタブにデータベースからデータをフェッチするときに同じ問題に直面しました..上記の解決策を試しましたが、実際には何も機能しませんでした..最後に、 Ottoに出会いました 。このライブラリを使用すると、アプリ内で通信できます。

このライブラリを yourAdapter.notifyDataSetChanged() に使用するだけで、db からデータを取得する場所に..

このビデオは私を大いに助けてくれましたhttps://www.youtube.com/watch?v=lVqBmGK3VuA

于 2016-04-28T10:19:03.653 に答える