私は断片を使って実装した3つのタブを持っています。私がTab2にスワイプするたびに、同じコードを実行したい、つまり、毎回Tab2のコンテンツを再読み込みしたいとしましょう。これの背後にある理由は、Tab1では、ユーザーはtab2に表示される内容を変更できるいくつかのオプションを持っているからです。したがって、彼がTab2からTab1に、そしてTab2に戻るたびに... Tab2のいくつかの変更が期待できます。 私はこのコードをonCreateView()
に入れようとしました...しかし、それはonCreateView()
が冒頭に一度だけ呼び出されており、決してもう一度呼び出されないことが私のアプリに表示されます。私は別の方法はonPageClickListener
を使用することであることを学びました。今、私の疑問を語る。 MainActivityでViewPager
クラスを実装してタブを作成しました。だから私のonPageListener
はMainActivity.java
であり、Tab2.java
クラスではありません。 だから私はTab2.xml
....にtextView
を作ると仮定し、Tab2にスワイプするとには、を制御することを期待してコードを書く。しかし、このコードはonPageListener
のTab2のためのものだとアプリはどのように知っていますか? onPageListener
はすべてのタブ用ですので、このコードのタブの指定方法は?onPageChangeListener()はどのページのコードを知っていますか?
1
A
答えて
1
Interface
を作成し、ViewPager
のFragments
のすべてを実装する方法があります。ような何か:
public interface TabSelectedListener {
void onSelected();
}
その後、あなたがフラグメントのそれぞれを持っているが、それを実装:
public class TabTwoFragment extends Fragment implements TabSelectedListener {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
// instantiate any member classes
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// inflate the view and bind any View items (TextViews, etc)
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
// do any setup of your view to get it into it's initial state
}
@Override
void onSelected() {
// any code which you want to run when the Fragment is selected in the ViewPager
// note that this is the method we created in the TabSelectedListener interface
}
}
次に、あなたのpageChangeListenerにあなたはアダプタから選択フラグメントを取得しますので、あなたのインターフェイスにキャストする必要があります
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageSelected(int position) {
TabSelectedListener listener = (TabSelectedListener) adapter.getItem(position);
listener.onSelected();
}
@Override
public void onPageScrollStateChanged(int state) {}
});
このようにして、アクティビティはどのフラグメントが何をしているかを知る必要はありません。また、フォーカスしたときに実行される各フラグメントに任意のコードを追加することもできます。
関連する問題
- 1. 私は今どのページを知っているか
- 2. フィードバーナーはページの内容をどのように知っていますか?
- 3. Got Hacked - このPHPコードは何を知っていますか?
- 4. コードの下にあるC++のどの機能を知っていますか?
- 5. 私はSymfonyのどのバージョンを知っていますか?
- 6. xavier_initializer()はアクティベーションをどのように知っていますか?
- 7. func2はどのようにコンテキストを知っていますか?
- 8. OnPageChangeListenerのスクロール方向
- 9. tfsbuild.exeの終了コードを知っている人はいますか?
- 10. 私たちはユーザーの国または都市コードをどのように知っていますか
- 11. は、どのように知っていますか?
- 12. シングルトンパターンのどのインスタンスを知っていますか
- 13. プレースメントはどのレイアウトを作成するのかを知っていますか?
- 14. プッシュサーバーは通知をどこに送信するかを知っています
- 15. 誰かがleekspin.comのようなタイマーのコードを知っていますか?
- 16. Grailsはレンダリングするページに「レイアウト」を適用する方法をどのように知っていますか?
- 17. どのようにウェブサイト用のプログラムを作っていますか?どのようなスキル/コードを知っていますか?
- 18. matplotlibはこのコードに表示する内容をどのように知っていますか?
- 19. Wordpress Taxonomy - どのようにobject_idを知っていますか?
- 20. FirefoxはそのページがAtomフィードであることをどのように知っていますか?
- 21. 私はどのようにしてサービスのステータスを知っていますか?
- 22. Rails MVC:collection_selectはどのコレクションレコードをレンダリングすべきかを知っていますか?
- 23. UpdateSubresourceはどのくらいのコピーを知っていますか?
- 24. WhatsAppは連絡先の国コードをどのように知っていますか?
- 25. 私はIE通知ページを持っていますが、そのページをスキップしてインデックスに戻すにはどうしたらいいですか?
- 26. このコードはどこが間違っていますか
- 27. サーブレットコントローラはどのメソッドを使うべきかを知っていますか?
- 28. RESTはサービススキーマについてどのように知っていますか?
- 29. このページにつながったボタンを知っている
- 30. アプリケーションは、コンポーネントがページであることをどのように知っていますか
したがって、onPageListenerにフラグメントの実際のコードが含まれていないと思われる場合、その主な目的は何ですか?どのような種類のコードが含まれているはずですか? – Nirvan
実際には、あなたが望むコードを置くことができます。それは結局あなたのアプリです!私は、リスナーのコードは最小限に抑えられ、汎用/抽象化されていることをお勧めします。あなたはあなたのフラグメントの1つを変更するたびにリスナーコードを編集したくないです。これは、フラグメントの機能に関係なく機能し続けるだけです。 – Jahnold
特定のフラグメントに固有のメインコードはどこにありますか? onCreateView()? onResume()? onPageListener()? – Nirvan