我有2个活动。在第一个活动中,最初有一个片段
MainActivity.java
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myactivity);
if(savedInstanceState == null) {
getFragmentManager().beginTransaction().replace(R.id.fragmentContainer, MainFragment.newInstance().commit();
}
}
}
然后用另一个片段点击按钮replaces
。
@Override
public void onClick(View arg0) {
DetailFragment detail = (DetailFragment)getFragmentManager().findFragmentById(R.id.detail);
getFragmentManager().beginTransaction().replace(R.id.detail, detail, "detail").commit();
}
在第二片段上有另一个按钮,点击它会打开一个新活动。
Intent popUp = new Intent(MainActivity.this, PopUp.class);
popUp.putExtra("CarID", carID);
startActivity(popUp);
从PopUp Activity,按设备将返回MainActivity。 现在面临的挑战是应用程序的业务逻辑,我需要在用户返回时更新ActionBar的上一个MainActivity的标题。
为此,我在MainFragment和DetailFragment上监听onResume()。此外,当用户从DetailFragment返回MainFragment时,我使用不同的文本更新ActionBar标题。
所以我需要知道用户何时回来:
1)PopUp活动>细节片段
2)细节片段>主要片段
当onResume()
关闭时,MainFragment
和DetailFragment
同时触发了PopUpActivity
。在MainFragment
我无法确切地知道是否为第一或第二案件调用了onResume()
。
仅当用户从onResume()
>返回时,DetailFragment
PopUpActivity
上的DetailFragment
触发的最佳做法是什么? DetailFragment
。换句话说,如何从PopUpActivity
检测到onResume()
已关闭,而MainFragment
未public static void Focus<T>(Form parent) where T : System.Windows.Forms.Form
{
bool isOpen = false;
foreach (var f in Application.OpenForms)
{
if (f is T)
{
isOpen = true;
(f as Form).Focus();
break;
}
}
if (!isOpen)
{
T newForm = Activator.CreateInstance<T>();
newForm.MdiParent = parent;
newForm.Show();
}
}
{。}}。
答案 0 :(得分:3)
我不会因为这样的事情而混淆onResume()
。
我建议你做以下事情:
Stack<String>
。FragmentManager.OnBackStackChangedListener
。MainActivity
onBackStackChanged()
实施中,使用FragmentManager.getBackStackEntryCount()
检查是否已推送或弹出后筹码组。
PopupActivity
代替startActivityForResult()
。startActivity()
onActivityResult()
中的MainActivity
,以便在PopupActivity
返回时,设置标题栏,标题位于堆栈顶部。onSaveInstanceState()
的{{1}}中保留标题堆栈,并将其恢复为MainActivity
。这似乎只是为了维护游戏而做了很多工作,但是你会因为onCreate()
而试图做到这一点而疯狂。
答案 1 :(得分:0)
试一试:
@Override
public void onResume() {
super.onResume();
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
// handle back button
return true;
}
return false;
}
});
}