[英]Return back to specific fragment of Activity-A from another Activity
我從Activity-A
打開Message-Fragment
,然后從Message-Fragment
打開Camera-Fragment
Message-Fragment
。 現在,當前片段是Camera-Fragment
,我上面有媒體滑塊。 現在,我有兩個選項,一個是ImagePreview-Fragment
,如果我單擊media-slider上的圖像項,則會打開該圖像。 其他是VideoPreview-Activity
,如果單擊media-slider上的視頻項目,則會打開該視頻。 因此,單擊視頻項目是一種條件。 如果單擊media-slider上的視頻項目並且視頻大小大於10 MB,則打開VideoTrim-Activity
並在修剪完成后調用VideoPreview-Activity
。
我正在從VideoPreview-Activity
或ImagePreview-Fragment
發送媒體。 因此,當我發送媒體時,我想返回帶有數據的Message-Fragment
。
如何從VideoPreview-Activity
(從Camera-Fragment打開)和VideoPreview-Activity
(從VideoTrim-Activity
打開)返回到Message-Fragment
。 另外,如果您可以幫助我如何從ImagePreview-Fragment
返回到Message-Fragment
我將不勝感激。 這些是單獨的問題。 希望能對您有所幫助。
我通過添加片段到backstack addToBackStack(fragmentTag)
打開addToBackStack(fragmentTag)
。
編輯:VideoPreview-Fragment必須是VideoPreview-Activity,而VidoTrim-Fragment必須是VideoTrim-Activity。 這些是活動。 就像您在圖片上看到的一樣。
如果我正確理解了所有內容,我認為我有解決方案。 我將忽略導航的所有其他方面,僅關注您要從VideoPreviewActivity
轉到MainActivity
並調整片段堆棧的事實,並且這是由完成按鈕(或類似操作)觸發的,而不是后退按鈕觸發的。
簡單的方法是使用活動結果函數startActivityForResult
,該函數將允許您在主活動中使用onActivityResult
函數將信息傳回。 然而,你可能會潛在地導航到VideoPreviewActivity
通過VideoTrimActivity
,所以你必須通過兩項活動這將是一個有點混亂,回傳給該信息。
因此,我提出的解決方案有幾個步驟。
無需在VideoPreviewActivity
上調用finish()
即可創建MainActivity
Intent intent = new Intent(context, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra()//Add your return data here
startActivity(intent)
無需啟動新的MainActivity
而是將您帶回到上一個活動並完成任務任務中位於其上方的所有活動。
將此函數添加到MainActivity
。
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
}
然后,在onStart
函數中,您可以檢查意圖以查看VideoPreview
返回的數據是否存在,並刪除不再需要的片段。
if (getIntent().hasExtra(YOUR_DATA)) {
if (getSupportFragmentManager().getBackStackEntryCount() > 0)
getSupportFragmentManager(). popBackStackImmediate("MESSAGE_TAG", 0);
}
其中“ MESSAGE_TAG”是ft.addToBackStack("MESSAGE_TAG")
調用中使用的標簽。
這將清除事務中帶有addToBackStack
所有片段。 MessageFragment
將再次開始其生命周期調用,您可以從
getActivity().getIntent()
嘗試這個,
首先在ActivityA中進行框架布局,
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在activityA中創建方法
public void openFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, null).commit();
String backStateName = fragment.getClass().getName();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = manager.beginTransaction();
fragmentTransaction.replace(R.id.container, fragment, backStateName);
fragmentTransaction.addToBackStack(backStateName);
fragmentTransaction.commit();
}
完成之后,在您的mainactivity中,然后覆蓋類似的方法
@Override
public void onBackPressed() {
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 0) {
if (exit) {
finish(); // finish activity
} else {
Toast.makeText(this, "Press Back again to Exit.",
Toast.LENGTH_SHORT).show();
exit = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exit = false;
}
}, 2 * 1000);
}
} else {
getSupportFragmentManager().popBackStackImmediate();
int c = getSupportFragmentManager().getBackStackEntryCount();
}
}
用這種方式
Fragment fragment;
fragment = new FS_PLKit_Calculator();
((FS_Home) getActivity()).openFragment(fragment);
嘗試這種方式可以保持流程的后向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.