Android ViewPager2片段重叠选项卡项

Android ViewPager2片段重叠选项卡项,android,kotlin,android-viewpager2,Android,Kotlin,Android Viewpager2,我为Viewpager2编写了以下代码,我有两个主要问题: 片段内容覆盖了选项卡标题。如何调整它,使内容从选项卡名称下的行开始 选项卡项未响应AbsSelectedListener上的 活动\u app.xml 以下是完整的代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http:/

我为
Viewpager2
编写了以下代码,我有两个主要问题:

  • 片段内容覆盖了选项卡标题。如何调整它,使内容从选项卡名称下的行开始
  • 选项卡项未响应AbsSelectedListener上的
  • 活动\u app.xml

    
    

    以下是完整的代码

        <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
            android:orientation="vertical"
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        <com.google.android.material.tabs.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
    
        <androidx.viewpager2.widget.ViewPager2
                android:id="@+id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
    
    
    </LinearLayout>
    
    查看页面2没有问题

    问题在于布局文件

    当我使用
    线性布局更改您的
    坐标布局时,请检查结果

        <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
            android:orientation="vertical"
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        <com.google.android.material.tabs.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
    
        <androidx.viewpager2.widget.ViewPager2
                android:id="@+id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
    
    
    </LinearLayout>
    
    无需为
    TabLayoutMediator
    创建自定义类,它将包含在
    实现'com.google.android.material:material:1.1.0-alpha08'

    示例代码

    R.layout.activity\u main

    输出


    以下是完整的代码

        <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
            android:orientation="vertical"
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        <com.google.android.material.tabs.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
    
        <androidx.viewpager2.widget.ViewPager2
                android:id="@+id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
    
    
    </LinearLayout>
    
    查看页面2没有问题

    问题在于布局文件

    当我使用
    线性布局更改您的
    坐标布局时,请检查结果

        <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
            android:orientation="vertical"
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        <com.google.android.material.tabs.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
    
        <androidx.viewpager2.widget.ViewPager2
                android:id="@+id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
    
    
    </LinearLayout>
    
    无需为
    TabLayoutMediator
    创建自定义类,它将包含在
    实现'com.google.android.material:material:1.1.0-alpha08'

    示例代码

    R.layout.activity\u main

    输出


    试试这个,在
    tablayoutcommediator.onConfigureTab
    中添加
    if-else
    语句,它对我有用。我不是科特林的代码

    TabLayoutMediator(tabs, viewpager, object : TabLayoutMediator.OnConfigureTabCallback {
            override fun onConfigureTab(tab: TabLayout.Tab, position: Int) {
                // if (position == 0){tab.setText("First Tab");}
                tab.text = "Tab $position"
            }
        }).attach()
    

    试试这个,在
    tablayoutmeditor.onConfigureTab
    中添加
    if-else
    语句,它对我有用。我不是科特林的代码

    TabLayoutMediator(tabs, viewpager, object : TabLayoutMediator.OnConfigureTabCallback {
            override fun onConfigureTab(tab: TabLayout.Tab, position: Int) {
                // if (position == 0){tab.setText("First Tab");}
                tab.text = "Tab $position"
            }
        }).attach()
    

    在我的例子中,带有tablayout的viewpager和viewpager2工作正常,但数据没有刷新

    我在Viewpager2中通过添加
    adapter.notifyItemChanged(位置)解决了这个问题如下所示:

    viewPager = (ViewPager2) android.findViewById(R.id.view_pager);
        tabLayout = (TabLayout) android.findViewById(R.id.tab_layout);
    
    
        ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager(),getLifecycle());
        viewPager.setAdapter(adapter);
    
        viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }
    
            @Override
            public void onPageSelected(int position){
                super.onPageSelected(position);
                adapter.notifyItemChanged(position);
            }
        });
    

    每次单击选项卡时,上述代码都将刷新代码。但在滑动viewpager时不是这样。

    在我的例子中,viewpager和viewpager2与TableLayout一起工作,但数据不刷新

    我在Viewpager2中通过添加
    adapter.notifyItemChanged(位置)解决了这个问题如下所示:

    viewPager = (ViewPager2) android.findViewById(R.id.view_pager);
        tabLayout = (TabLayout) android.findViewById(R.id.tab_layout);
    
    
        ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager(),getLifecycle());
        viewPager.setAdapter(adapter);
    
        viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }
    
            @Override
            public void onPageSelected(int position){
                super.onPageSelected(position);
                adapter.notifyItemChanged(position);
            }
        });
    

    每次单击选项卡时,上述代码都将刷新代码。但滑动viewpager时不会。谢谢,我如何才能将
    布局
    添加到
    选项卡
    而不是仅仅使用
    选项卡。text=“tab$position”
    @HasanAYousef不明白你能探索更多吗我想在
    选项卡中显示
    片段
    ,不仅仅是
    文本
    element@HasanAYousef您想显示片段名称而不是
    tab.text=“tab$position”
    我遇到了这个错误:`java.lang.NoSuchMethodError:No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;在Ljava/lang/invoke/LambdaMetafactory类中;或其超类中(声明'java.lang.invoke.LambdaMetafactory'出现在/apex/com.android.runtime/javalib/core oj.jar)com.google.android.material.tabs.TabLayout$TabView.addOnLayoutChangeListener(TabLayout.java:2592)`谢谢,我如何将
    layout
    添加到
    选项卡
    而不是仅仅使用
    tab.text=“tab$position”
    @HasanAYousef没有得到你可以探索更多吗我想在
    选项卡中显示
    片段
    ,而不仅仅是
    文本
    element@HasanAYousef您想显示片段名称而不是
    tab.text=“tab$position”
    我遇到了这个错误:`java.lang.NoSuchMethodError:No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;在Ljava/lang/invoke/LambdaMetafactory类中;或其超类中(声明'java.lang.invoke.LambdaMetafactory'出现在/apex/com.android.runtime/javalib/core oj.jar)com.google.android.material.tabs.TabLayout$TabView.addOnLayoutChangeListener(TabLayout.java:2592)`您是否尝试使用Kotlin?是否尝试使用Kotlin?
    viewPager = (ViewPager2) android.findViewById(R.id.view_pager);
        tabLayout = (TabLayout) android.findViewById(R.id.tab_layout);
    
    
        ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager(),getLifecycle());
        viewPager.setAdapter(adapter);
    
        viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }
    
            @Override
            public void onPageSelected(int position){
                super.onPageSelected(position);
                adapter.notifyItemChanged(position);
            }
        });