当从片段序列通过 backStack returns 返回到 main activity 时,涉及 Android 生命周期的哪一部分(如果有的话)?
What part of the Android life cycle is involved (if any) when going back through backStack returns to main activity from a sequence of fragments?
我正在努力学习 Fragment
class。这是 MainActivity
:
package com.dslomer64.hour8appflip;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
Button btnStartGarcon, btnStartWaiter;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStartGarcon = (Button)findViewById(R.id.btnStartGarcon);
btnStartWaiter = (Button)findViewById(R.id.btnStartWaiter);
ableButtons(true);
}
@Override protected void onStart(){
super.onStart();
ableButtons(true);
}
@Override protected void onRestart(){
super.onRestart();
ableButtons(true);
}
@Override protected void onResume(){
super.onResume();
ableButtons(true);
}
public void showFragmentGarcon(){
FragmentGarcon fragmentGarcon = new FragmentGarcon();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.layout_container, fragmentGarcon);
ft.addToBackStack("Garcon");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
public void showFragmentWaiter(){
FragmentWaiter fragmentWaiter = new FragmentWaiter();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.layout_container, fragmentWaiter);
ft.addToBackStack("Waiter");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
public void onStartGarcon(View view) {
showFragmentGarcon();
ableButtons(false);
}
public void onStartWaiter(View view) {
showFragmentWaiter();
ableButtons(false);
}
private void ableButtons(boolean b){
btnStartWaiter.setEnabled(b);
btnStartGarcon.setEnabled(b);
}
}
启动后,屏幕在左侧。第一次点击按钮后,它在右边,因为我决定最好禁用 MainActivity 按钮。
但是当我点击 back
图标的次数足以耗尽 backStack
时,无论我做什么(参见 onStart
中非常多余的 ableButtons(true)
,onRestart
onResume
), 按钮仍然被禁用。
怎么办?
What part of the Android life cycle is involved (if any) when going
back through backStack returns to main activity from a sequence of
fragments?
不涉及Activity生命周期。当您替换 Fragment 时,您不会离开 activity,因此您不会 return 它。
But when I tap the back icon enough times to exhause the backStack, no
matter what I do (see the very redundant ableButtons(true) in onStart,
onRestart onResume), the buttons are still disabled.
这是预期的行为。您禁用了这些按钮,当 backStack
为空时,您可以再次启用它们。例如你可以覆盖 onBackPressed
@Override
public void onBackPressed(){
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 0){
ableButtons(true);
}
super.onBackPressed();
}
想通了(与Android生命周期无关):
FragmentManager fm = getFragmentManager();
...
@Override
public void onBackPressed() {
super.onBackPressed();
if( fm.getBackStackEntryCount() == 0){
ableButtons(true);
}
}
并在 showFragmentGarcon
和另一个 showFrag...
中使用 fm
:
public void showFragmentGarcon(){
FragmentGarcon fragmentGarcon = new FragmentGarcon();
FragmentTransaction ft = fm.beginTransaction();
// ^^
我正在努力学习 Fragment
class。这是 MainActivity
:
package com.dslomer64.hour8appflip;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
Button btnStartGarcon, btnStartWaiter;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStartGarcon = (Button)findViewById(R.id.btnStartGarcon);
btnStartWaiter = (Button)findViewById(R.id.btnStartWaiter);
ableButtons(true);
}
@Override protected void onStart(){
super.onStart();
ableButtons(true);
}
@Override protected void onRestart(){
super.onRestart();
ableButtons(true);
}
@Override protected void onResume(){
super.onResume();
ableButtons(true);
}
public void showFragmentGarcon(){
FragmentGarcon fragmentGarcon = new FragmentGarcon();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.layout_container, fragmentGarcon);
ft.addToBackStack("Garcon");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
public void showFragmentWaiter(){
FragmentWaiter fragmentWaiter = new FragmentWaiter();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.layout_container, fragmentWaiter);
ft.addToBackStack("Waiter");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
public void onStartGarcon(View view) {
showFragmentGarcon();
ableButtons(false);
}
public void onStartWaiter(View view) {
showFragmentWaiter();
ableButtons(false);
}
private void ableButtons(boolean b){
btnStartWaiter.setEnabled(b);
btnStartGarcon.setEnabled(b);
}
}
启动后,屏幕在左侧。第一次点击按钮后,它在右边,因为我决定最好禁用 MainActivity 按钮。
但是当我点击 back
图标的次数足以耗尽 backStack
时,无论我做什么(参见 onStart
中非常多余的 ableButtons(true)
,onRestart
onResume
), 按钮仍然被禁用。
怎么办?
What part of the Android life cycle is involved (if any) when going back through backStack returns to main activity from a sequence of fragments?
不涉及Activity生命周期。当您替换 Fragment 时,您不会离开 activity,因此您不会 return 它。
But when I tap the back icon enough times to exhause the backStack, no matter what I do (see the very redundant ableButtons(true) in onStart, onRestart onResume), the buttons are still disabled.
这是预期的行为。您禁用了这些按钮,当 backStack
为空时,您可以再次启用它们。例如你可以覆盖 onBackPressed
@Override
public void onBackPressed(){
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 0){
ableButtons(true);
}
super.onBackPressed();
}
想通了(与Android生命周期无关):
FragmentManager fm = getFragmentManager();
...
@Override
public void onBackPressed() {
super.onBackPressed();
if( fm.getBackStackEntryCount() == 0){
ableButtons(true);
}
}
并在 showFragmentGarcon
和另一个 showFrag...
中使用 fm
:
public void showFragmentGarcon(){
FragmentGarcon fragmentGarcon = new FragmentGarcon();
FragmentTransaction ft = fm.beginTransaction();
// ^^