我想让我的片段转换像viewpager,但我不想使用viewpager,因为如果我使用它,我必须在适配器中使用一定数量的片段。 而且我希望在单击底部导航栏按钮时像 viewpager 一样进行片段转换。谢谢大家的回答,我在下面提供了我想要的原因)
我正在开发一个应用程序,这个应用程序的主要活动有 3 个主要部分,底部有一个底部导航栏。当你按下一个 BNB 片段时,它会像 viewpager 一样发生变化。您还可以通过滑动来更改片段。当您按下其中一个片段中的按钮时。片段也出现在主要活动中。在这个应用程序中只有一项活动。因为如果有第二个活动,片段的更改应该会更慢,但实际上会更快。问题是,如果我们在主活动中使用视图分页器,则除了适配器中提供的片段外,我们无法使用其他片段,因此我们需要 sexond 活动来显示其他片段。所以我认为他们在没有viewpager的情况下做到了这一点,我也想让它有viewpager。这是该应用程序的链接,您可以查看一下https://play.google.com/store/apps/details?id=uz.islom
我不知道该尝试什么
要在不使用 ViewPager 的情况下创建类似 ViewPager 的体验:
方法一:使用水平ScrollView
<HorizontalScrollView
android:id="@+id/horizontal_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<!-- Add pages here -->
</LinearLayout>
</HorizontalScrollView>
LinearLayout container = findViewById(R.id.container);
for (int i = 0; i < numberOfPages; i++) {
View page = LayoutInflater.from(context).inflate(R.layout.page_layout, null);
container.addView(page);
}
方法二:使用RecyclerView
<RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="LinearLayoutManager"
android:orientation="horizontal" />
public class PageAdapter extends RecyclerView.Adapter<PageAdapter.ViewHolder> {
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.page_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
// Bind page data
}
@Override
public int getItemCount() {
return numberOfPages;
}
}
方法三:使用FragmentStateAdapter
public class PageAdapter extends FragmentStateAdapter {
public PageAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
super(fragmentManager, lifecycle);
}
@NonNull
@Override
public Fragment createFragment(int position) {
return PageFragment.newInstance(position);
}
@Override
public int getItemCount() {
return numberOfPages;
}
}
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.container, PageFragment.newInstance(position));
transaction.commit();