我在我的 MainActivity 中有 3 個片段,我將第二個片段設定為默認片段(當您啟動應用程式時,您將看到第二個片段)。
我想實作一個類似于 OnBackPressed() 的代碼,即當用戶按下手機的回傳按鈕并且他/她處于第一或第三片段時,應用程式不會退出該應用程式,而是回傳到第二個應用程式。
MainActivity
public class MainActivity extends AppCompatActivity {
private ViewPager2 mPager。
private FragmentStateAdapter pagerAdapter;
private int num_page = 3;
private CircleIndicator3 mIndicator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(s savedInstanceState)。
setContentView(R.layout.activity_main)。
mPager = findViewById(R.id.viewpager);
pagerAdapter = new MyAdapter(this, num_page) 。
mPager.setAdapter(pagerAdapter)。
mIndicator = findViewById(R.id.indicator);
mIndicator.setViewPager(mPager)。
mIndicator.createIndicators(num_page,0)。
mPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
mPager.setCurrentItem(1000, false)。
mPager.setOffscreenPageLimit(1)。
mPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override。
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels)。
if (positionOffsetPixels == 0) {
mPager.setCurrentItem(position);
}
}
@Override[/span
public void onPageSelected(int position) {
super.onPageSelected(position)。
mIndicator.animatePageSelected(position%num_page)。
}
});
mPager.setPageTransformer(new ViewPager2.PageTransformer() {
@Override
public void transformPage(@NonNull View page, float position) {
float myOffset = position。
if (mPager.getOrientation() == ViewPager2.ORIENTATION_HORIZONTAL) {
if (ViewCompat.getLayoutDirection(mPager) == ViewCompat.LAYOUT_DIRECTION_RTL) {
} else {
}
} else {
}
}
});
}
}
page.setTranslationY(myOffset);
page.setTranslationX(-myOffset);
page.setTranslationX(myOffset);
MyAdapter
public class MyAdapter extends FragmentStateAdapter {
public int mCount;
public MyAdapter(FragmentActivity fa, int count) {
super(fa)。
mCount = count。
}
@NonNull@Override
public Fragment createFragment(int position) {
int index = getRealPosition(position)。
if (index == 0) return new FragFirst() 。
else if (index == 1) return new FragSecond()。
else return new FragThird() 。
}
@Override
public int getItemCount() {
return 2000;
}
public int getRealPosition(int position) {
return position % mCount;
FragFirst, FragSecond 和 FragThird
public class FragFirst extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup, container, Bundle savedInstanceState){
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.frame_1p, container, false);
}
謝謝你
uj5u.com熱心網友回復:
一般來說,如果你addToBackStack它的交易,當你去到第1個或第3個時,那么你可以在onBackPressed時回到第2個。
fragmentManager
.beginTransaction()
.replace(R.id.mainContainer, thirdFragment, ThirdFragment.TAG)
.addToBackStack(null)
.commit()。
uj5u.com熱心網友回復:
根據Google的官方培訓,你可以在Activity中定義onBackPressed,如:
@Override
public void onBackPressed() {
if (viewPager.getCurrentItem() == 1) {
//如果用戶當前正在看第二頁,允許系統處理。
//Back button。這將呼叫該活動的finish()并彈出后退堆疊。 /span>
super.onBackPressed()。
} else if (viewPager.getCurrentItem() == 0| viewPager. getCurrentItem() == 2) {
//選擇第二頁。
viewPager.setCurrentItem(1)。
} else {
// There is no such a page number.
throw new IllegalArgumentException()。
}
(*除了上述情況外,官方培訓還使用了FragmentActivity而不是AppCompatActivity。我不知道它是否與這個問題有關。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/318380.html
標籤:
上一篇:ChromeOptions的addArguments(java.lang.String...arguments)方法出現了錯誤。
下一篇:用戶資訊不顯示在文本視圖中
