我有一個MainActivity
和其他Fragments
當用戶點擊NavigationViewer
時打開WebView
。我在導航視圖中添加了主頁Fragment
,但我不知道如何將其設置爲默認值,以便如果用戶打開該應用程序,則會打開默認主頁Fragment
。我是否必須創建另一個Java類或使用MainActivity
。 Java作爲家庭?如果是,我該如何使用MainActivity
。 Java作爲家庭Fragment
?如果用戶單擊其他Fragment
打開WebView
並按下後退按鈕,如何使其返回到默認主頁Fragment
?此刻,如果我按下後退按鈕,它會直接破壞應用程序並返回到手機背景。如何使mainactivity成爲主頁片段?
-2
A
回答
0
如果你有一個啓動,活動具有片段提供商設置的內容,你可能要存儲默認片段莫名其妙。
通常你開始你的活動,並有一個FragmentManager用一個片段替換你的部分內容。
如果您想要根據邏輯改變行爲,您希望使用SharedPreferences或任何其他存儲技術(如SQLite)以Ids或類似方式存儲起始片段。
0
我假設你在onNavigationItemSelected
使用片段之間改變FragmentManager
此類似:爲你做什麼
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, new HomeFragment);
ft.commit();
如果你想在活動開始時打開片段,你必須是完全一樣在onNavigationItemSelected
,你必須調用FragmentManager
上onCreate
,也使選擇在NavigationView
項目:
navigationView.setCheckedItem(R.id.home_fragment);
至於背部b utton,則應覆蓋onBackPressed
函數。如果您使用的抽屜式導航模板從Android Studio中,它應該是:
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
你可以簡單地在其他部分添加你的邏輯,你可以通過保持對它的引用跟蹤活性片段/從FragmentManager看(或看抽屜式導航的選擇的項目),並使其相應的行爲:
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.content_frame)
if(currentFragment instanceof HomeFragment)
super.onBackPressed();
else {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, new HomeFragment);
ft.commit();
}
0
第一套某種「容器」在你的MainActivity
Layout
其中將包含Fragment
:
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/indications_LL"
>
</FrameLayout>
然後設置FragmentManager
和FragmentTransaction
:
fragmentTransaction.add(R.id.container, new MainFragment(), *"set Tag for your fragment"*);
不要忘記:
private FragmentManager fragmentManager = getFragmentManager();
private FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
如果你想在你的
onCreate()
方法來啓動與主
Fragment
添加以下代碼
添加碎片到BackStack:
ragmentTransaction.addToBackStack(*"Your Fragment Tag"*)
低於我的示例代碼看看:
/**
* A fragment transaction Method
*
* @param fragment the fragment we want to display
*/
private void setFragmentTransaction(Fragment fragment, MainMenus tagName) {
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
//replacing fragments new Fragments
if (fragment != null) {
fragmentTransaction.replace(R.id.container, fragment, tagName.toString());
} else if (fragment == null && (fragmentManager.getBackStackEntryCount() == 0)) { // starting with main Fragment
fragmentTransaction.add(R.id.container, new MainFragment(), MainMenus.MAIN_MENUS.toString());
}
if (tagName == null) {
fragmentTransaction.addToBackStack(null);
} else {
fragmentTransaction.addToBackStack(tagName.toString());
}
fragmentTransaction.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();
}
對於backbutton
必須@Override
的onBackPressed()
方法。然後,你可以使用Fragment's TAG
或者你可以popBackStack()
處理backPress當它達到特定片段的數量: 看看下面的例子:
@Override
public void onBackPressed() {
//The first method, using TAG
if (fragmentManager.findFragmentByTag(* "Your Fragment TAG" *.toString()) !=null){
fragmentManager.popBackStack()
}
//The second method: if more than two fragment, delete fragment stack
if (fragmentManager.getBackStackEntryCount() > 3) {
fragmentManager.popBackStack();
}
super.onBackPressed();
}
相關問題
- 1. 如何在MainActivity中獲取片段?
- 2. 如何從mainActivity添加主頁AppWidget?
- 3. 片段的主頁圖標
- 4. 如何完成()MainActivity從Activity3
- 5. 試圖插入到數據庫與MainActivity從片段與片段
- 6. 分離片段代碼和MainActivity代碼
- 7. MainActivity仍然可見的片段
- 8. MainActivity中的Switch.setOnCheckedChangeListener而不是片段
- 9. 從MainActivity更新textview內部片段
- 10. 從AnotherActivity調用片段到MainActivity
- 11. 從MainActivity刷新當前片段
- 12. Android:從MainActivity訪問片段實例
- 13. 從MainActivity Android Studio「刷新」片段佈局
- 14. 將數據從MainActivity傳遞到片段
- 15. 在MainActivity中調用imageView片段
- 16. 從片段中禁用MainActivity SwipeRefreshLayout
- 17. 從片段到mainActivity的意圖
- 18. 感覺在MainActivity中有單個片段?
- 19. 片段是在MainActivity的按鈕下
- 20. 如何使某個頁面成爲WordPress的主頁?
- 21. 如何攔截片段調用到MainActivity中的popBackStack()?
- 22. 如何在Android中將片段與MainActivity進行通信?
- 23. 如何從片段活動調用MainActivity變量
- 24. 如何在MainActivity中查找最後一個片段
- 25. 如何在啓動片段時隱藏MainActivity佈局?
- 26. 如何訪問MainActivity()中的片段元素?
- 27. 如何從MainActivity訪問和更新片段組件(SeekBar,TextBox等)?
- 28. 如何從MainActivity啓動一個片段活動?
- 29. 如何隱藏我的MainActivity的開始(或應用)的片段?
- 30. 如何實現onBackPress從導航抽屜中的片段到MainActivity