使用 ViewPager 搭配 Fragment 實現多頁籤(A、B、C 三頁)。需求:用戶滑動到 B、C 頁時,先顯示圓環進度條,數據加載完成後再顯示具體內容。
無需切換佈局文件,直接在 Fragment 中通過 View.setVisibility() 控制進度條與內容視圖的顯隱:
<FrameLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 真實內容 -->
<RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
<!-- 加載進度條,居中顯示 -->
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="visible" />
</FrameLayout>
public class MyFragment extends Fragment {
private ProgressBar progressBar;
private RecyclerView recyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my, container, false);
progressBar = view.findViewById(R.id.progressBar);
recyclerView = view.findViewById(R.id.recyclerView);
return view;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && isAdded()) {
// 頁面真正對用戶可見時觸發
loadData();
}
}
private void loadData() {
// 1. 顯示進度條,隱藏內容
progressBar.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
// 2. 模擬異步加載
new Handler(Looper.getMainLooper()).postDelayed(() -> {
// 更新適配器數據...
recyclerView.setAdapter(new MyAdapter(dataList));
// 3. 加載完成:隱藏進度條,顯示內容
progressBar.setVisibility(View.GONE);
recyclerView.setVisibility(View.VISIBLE);
}, 1500);
}
}
true,適合觸發數據加載isAdded() 判斷 Fragment 是否已附加到 Activity,避免空指針若需更強的模態感,可在 loadData() 開始時 dialog.show(),結束時 dialog.dismiss()。但頁面內疊加方案體驗更流暢,推薦優先使用。