android 在ViewPager中创建视图时加载两个片段

pgpifvop  于 2023-06-20  发布在  Android
关注(0)|答案(1)|浏览(161)

我有3个选项卡在查看寻呼机名称(计划,在处理和完成)的位置分别为0,1,2。我现在面临的问题是,当创建视图时,它执行方法loadData()来加载“Scheduled”和“InProcess”数据。然后,当我滑动到“进程中”片段时,“完成”数据加载。但是当我滑动到“完成”片段时,什么也没有发生。然后,当我滑回“进程中”片段,它加载“计划”数据等。我做错了什么。

    • TabFragment. java**
  1. public static TabFragment newInstance(int position, String name) {
  2. TabFragment fragment = new TabFragment();
  3. Bundle args = new Bundle();
  4. args.putInt(ARG_TAB_POSITION, position);
  5. args.putString(ARG_TAB_NAME, name);
  6. fragment.setArguments(args);
  7. return fragment;
  8. }
  9. public TabFragment() {
  10. // Required empty public constructor
  11. }
  12. @Override
  13. public void onAttach(@NonNull Context context) {
  14. super.onAttach(context);
  15. this.context = context.getApplicationContext();
  16. }
  17. @Override
  18. public void onCreate(@Nullable Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. if (getArguments() != null) {
  21. int position = getArguments().getInt(ARG_TAB_POSITION);
  22. String name = getArguments().getString(ARG_TAB_NAME);
  23. itemList = new ArrayList<>();
  24. }
  25. }
  26. @Nullable
  27. @Override
  28. public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  29. View view;
  30. int tabPosition = getArguments() != null ? getArguments().getInt(ARG_TAB_POSITION) : -1;
  31. String tabName = getArguments() != null ? getArguments().getString(ARG_TAB_NAME) : "";
  32. // Inflate the corresponding layout file based on the tab position
  33. switch (tabPosition) {
  34. case 0:
  35. view = inflater.inflate(R.layout.fragment_tab_scheduled, container, false);
  36. recyclerView = view.findViewById(R.id.recyclerView);
  37. LinearLayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
  38. recyclerView.setLayoutManager(layoutManager);
  39. recyclerViewAdapter = new MeetingListAdapter(context);
  40. recyclerView.setAdapter(recyclerViewAdapter);
  41. noDataAnimationView=view.findViewById(R.id.noDataAnimationView);
  42. loadData();
  43. break;
  44. case 1:
  45. view = inflater.inflate(R.layout.fragment_tab_inprocess, container, false);
  46. recyclerView = view.findViewById(R.id.recyclerView);
  47. LinearLayoutManager layoutManager2 = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
  48. recyclerView.setLayoutManager(layoutManager2);
  49. recyclerViewAdapter = new MeetingListAdapter(context);
  50. recyclerView.setAdapter(recyclerViewAdapter);
  51. noDataAnimationView=view.findViewById(R.id.noDataAnimationView);
  52. loadData();
  53. break;
  54. case 2:
  55. view = inflater.inflate(R.layout.fragment_tab_finished, container, false);
  56. recyclerView = view.findViewById(R.id.recyclerView);
  57. LinearLayoutManager layoutManager3 = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
  58. recyclerView.setLayoutManager(layoutManager3);
  59. recyclerViewAdapter = new MeetingListAdapter(context);
  60. recyclerView.setAdapter(recyclerViewAdapter);
  61. noDataAnimationView=view.findViewById(R.id.noDataAnimationView);
  62. loadData();
  63. break;
  64. default:
  65. // Return an empty view if the tab position is invalid
  66. return new View(context);
  67. }
  68. // Load data if it hasn't been loaded yet
  69. return view;
  70. }
  71. private void loadData() {
  72. int tabPosition = getArguments() != null ? getArguments().getInt(ARG_TAB_POSITION) : -1;
  73. String tabName = getArguments() != null ? getArguments().getString(ARG_TAB_NAME) : "";
  74. // Perform the appropriate Volley request based on the tab position
  75. switch (tabPosition) {
  76. case 0:
  77. GET_MEETING_LIST("Scheduled");
  78. Log.i("KICK", "Tab-Scheduled");
  79. break;
  80. case 1:
  81. GET_MEETING_LIST("InProcess");
  82. Log.i("KICK", "Tab-InProcess");
  83. break;
  84. case 2:
  85. GET_MEETING_LIST("Finished");
  86. Log.i("KICK", "Tab-Finished");
  87. break;
  88. default:
  89. // Handle invalid tab position
  90. break;
  91. }
  92. }
    • Activity. java**
  1. public class MeetingListActivity extends AppCompatActivity {
  2. private ViewPager viewPager;
  3. private TabLayout tabLayout;
  4. private TabAdapter adapter;
  5. private List<TabFragment> fragmentList;
  6. private static final String ARG_TAB_NAME = "tab_name";
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_meeting_list);
  11. viewPager = findViewById(R.id.viewPager);
  12. tabLayout = findViewById(R.id.tabLayout);
  13. fragmentList = new ArrayList<>();
  14. fragmentList.add(TabFragment.newInstance(0, "Scheduled"));
  15. fragmentList.add(TabFragment.newInstance(1, "InProcess"));
  16. fragmentList.add(TabFragment.newInstance(2, "Finished"));
  17. adapter = new TabAdapter(getSupportFragmentManager());
  18. viewPager.setAdapter(adapter);
  19. tabLayout.setupWithViewPager(viewPager);
  20. }
  21. private class TabAdapter extends FragmentPagerAdapter {
  22. public TabAdapter(FragmentManager fm) {
  23. super(fm);
  24. }
  25. @Override
  26. public Fragment getItem(int position) {
  27. return fragmentList.get(position);
  28. }
  29. @Override
  30. public int getCount() {
  31. return fragmentList.size();
  32. }
  33. @Override
  34. public CharSequence getPageTitle(int position) {
  35. return fragmentList.get(position).getArguments().getString(ARG_TAB_NAME);
  36. }
  37. @Override
  38. public int getItemPosition(Object object) {
  39. // Force fragments to be recreated when the position changes
  40. return POSITION_NONE;
  41. }
  42. }
  43. }
mdfafbf1

mdfafbf11#

默认情况下,Viewpager加载2个片段/页。所以只能加载一个。

  1. int offscreenLimit = 1; // Number of pages to retain on either side
  2. viewPager.setOffscreenPageLimit(offscreenLimit);

相关问题