我在它下面有一個tabLayout
和一個viewPager
。當我單擊選項卡時,它可以很好地切換選項卡。但是,當我滑動時,viewPage 會滑動,但選項卡不會改變焦點。我必須手動單擊相應的選項卡才能更改焦點(viewPager 不會更改)。
例如,如果我在第四張幻燈片上,向左滑動,viewPage 會轉到第三張幻燈片,但選項卡沒有聚焦。我必須手動點擊第三個選項卡才能更改焦點。
我想知道當我在 viewPager 中從一個視圖滑動到另一個視圖時,如何讓標簽跟隨滑動。
片段 XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<com.google.android.material.tabs.TabLayout
android:layout_height="wrap_content"
android:id="@ id/tab_layout"
android:layout_width="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/pager"/>
<androidx.viewpager.widget.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/pager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</androidx.constraintlayout.widget.ConstraintLayout>
尋呼機片段:
public class PagerFragment extends Fragment {
ViewPagerAdapter pagerAdapter;
ViewPager pager;
TabLayout tl;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pagerAdapter = new ViewPagerAdapter(this.getContext(), getChildFragmentManager(), 4, getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = super.onCreateView(inflater, container, savedInstanceState);
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_pager, null);
pager = root.findViewById(R.id.pager);
pager.setAdapter(pagerAdapter);
tl = root.findViewById(R.id.tab_layout);
tl.addTab(tl.newTab().setText("1"));
tl.addTab(tl.newTab().setText("2"));
tl.addTab(tl.newTab().setText("3"));
tl.addTab(tl.newTab().setText("4"));
tl.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
pager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
tl.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(pager));
return root;
}
}
配接器:
public class ViewPagerAdapter extends FragmentPagerAdapter {
private Context myContext;
int totalTabs;
public ViewPagerAdapter(Context context, FragmentManager fm, int totalTabs, FragmentActivity fa) {
super(fm);
myContext = context;
this.totalTabs = totalTabs;
}
public Fragment getItem(int position) {
graph_test gt = new graph_test(String.valueOf(position), position);
return gt;
}
@Override
public int getCount() {
return totalTabs;
}
}
注意:我知道 FragmentPagerAdapter 已被棄用。我被要求這樣做。
謝謝。
uj5u.com熱心網友回復:
使用androidx.viewpager.widget.ViewPager
您還必須設定ViewPager.OnPageChangeListener
with TabLayout.TabLayoutOnPageChangeListener
,如下所示:
pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tl));
通過執行上述操作,您應該能夠在向左或向右滑動 ViewPager 時更改 Tab 焦點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/496430.html
標籤:爪哇 安卓 安卓工作室 安卓片段 android-viewpager
上一篇:如何為大量片段創建視圖模型實體?