如何在没有视图寻呼机的情况下创建视图寻呼机

问题描述 投票:0回答:1

我想让我的片段转换像viewpager,但我不想使用viewpager,因为如果我使用它,我必须在适配器中使用一定数量的片段。 而且我希望在单击底部导航栏按钮时像 viewpager 一样进行片段转换。谢谢大家的回答,我在下面提供了我想要的原因)

我正在开发一个应用程序,这个应用程序的主要活动有 3 个主要部分,底部有一个底部导航栏。当你按下一个 BNB 片段时,它会像 viewpager 一样发生变化。您还可以通过滑动来更改片段。当您按下其中一个片段中的按钮时。片段也出现在主要活动中。在这个应用程序中只有一项活动。因为如果有第二个活动,片段的更改应该会更慢,但实际上会更快。问题是,如果我们在主活动中使用视图分页器,则除了适配器中提供的片段外,我们无法使用其他片段,因此我们需要 sexond 活动来显示其他片段。所以我认为他们在没有viewpager的情况下做到了这一点,我也想让它有viewpager。这是该应用程序的链接,您可以查看一下https://play.google.com/store/apps/details?id=uz.islom

我不知道该尝试什么

android-viewpager bottomnavigationview android-viewpager2
1个回答
0
投票

要在不使用 ViewPager 的情况下创建类似 ViewPager 的体验:

方法一:使用水平ScrollView

  1. 在布局中创建水平滚动视图:
<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>
  1. 以编程方式添加页面:
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

  1. 创建一个带有水平LinearLayoutManager的RecyclerView:
<RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layoutManager="LinearLayoutManager"
    android:orientation="horizontal" />
  1. 创建RecyclerView.Adapter:
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

  1. 创建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;
    }
}
  1. 使用FragmentTransaction替换fragment:
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.container, PageFragment.newInstance(position));
transaction.commit();
© www.soinside.com 2019 - 2024. All rights reserved.