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
编写了以下代码,我有两个主要问题:
以下是完整的代码
<?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);
}
});