我有3個使用片段實現的選項卡。比方說,每次滑動到Tab2時,我都希望執行相同的代碼,也就是說,我希望每次都重新加載Tab2內容。這背後的原因是,在Tab1中,用戶有一些選項可以用來更改要在tab2中顯示的內容。因此,每當他從Tab2到Tab1,然後回到Tab2時... Tab2中的一些變化是可以預期的。 我試着把這段代碼放到onCreateView()
......但是它出現在我的應用程序中,onCreateView()
只在開始時被調用一次,永遠不會再被調用。我瞭解到另一種方式是使用onPageClickListener
。現在我懷疑了。我在MainActivity中實現了ViewPager
類來創建我的選項卡。所以我的onPageListener
也出現在MainActivity.java
而不是在Tab2.java
類。 因此,假設我在Tab2.xml
....中編寫了textView
....我在onPageListener
中編寫代碼,期望它在Tab2中控制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) {}
});
這樣你的Activity不必知道哪個片段做了什麼。你也可以添加你想要的任何代碼給每個片段,當它們被聚焦時它們將被運行。
相關問題
- 1. 如何知道jar文件的用途?
- 2. 我想知道以下C++代碼的用途
- 3. 如何知道emojis的ASCII/UTF代碼?
- 4. 如何讓vim SpellCheck *不知道代碼?
- 5. 需要知道如何使代碼更
- 6. 想知道如何爲以下代碼編寫UT代碼嗎?
- 7. 不知道如何使用代碼首先流利的API
- 8. 無法知道如何使用替代
- 9. 如何知道何時在我的代碼中訪問變量?
- 10. 如何使用php代碼知道瀏覽器
- 11. 如何知道使用GPU或CPU執行代碼?
- 12. 如何知道scipy函數是否使用C代碼?
- 13. 如何知道是否使用ASCII碼?
- 14. 任何人都知道manifest.mf文件的用途?
- 15. 我期待幾何代碼,我不知道P1 [X]代碼
- 16. WhatsApp如何知道我的聯繫人的國家代碼?
- 17. 如何知道我的代碼中的分段錯誤?
- 18. 我想知道代碼的輸出
- 19. 新來的碼頭工人,想知道如何閱讀碼頭的源代碼?
- 20. 我如何知道我的代碼是否可合成? [Verilog]
- 21. 我如何知道我的代碼方法好還是不好?
- 22. 如何知道手機的國家代碼?
- 23. JComponent不知道如何創建面板有重複的代碼
- 24. 如何濃縮代碼:知道旋轉後圖像的極限
- 25. 如何從代碼中知道sencha的版本
- 26. 如何知道Magento文件中某些代碼的輸出?
- 27. 如何知道OpenShift 3獲取最新的源代碼?
- 28. 調試器如何知道源代碼中的行號?
- 29. gcc如何知道源代碼的來源?
- 30. CUDA - 無效的設備函數,如何知道[架構,代碼]?
因此,如果onPageListener不應該包含片段的實際代碼,那麼它的主要用途是什麼?它應該包含什麼類型的代碼? – Nirvan
實際上,您可以在其中放入任何代碼 - 畢竟它是您的應用程序!我建議儘管聽衆中的代碼保持在最低限度,並且是通用的/抽象的。每次對某個片段進行更改時,您不希望編輯偵聽器代碼。無論片段的功能如何,它都應該繼續工作。 – Jahnold
那麼特定片段的主代碼應該在哪裏去? onCreateView()?的onResume()? onPageListener()? – Nirvan