Android Fragments - 我们真的应该保存状态吗?
Android Fragments - Should we really save state?
我用这段代码实现了一个简单的activity:
public class MainActivity extends AppCompatActivity implements Fragment_1.Operations{
Fragment_1 fragment_1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragmentactivity);
fragment_1=(Fragment_1)getSupportFragmentManager().findFragmentByTag("fragment_1");
}
//called on buttonclick, fired from a button existing in R.layout.fragmentactivity
public void createFragment(View view){
if (getSupportFragmentManager().findFragmentByTag("fragment_1")==null){
fragment_1=new Fragment_1();
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragmentactt,fragment_1,"fragment_1");
transaction.commit();
getSupportFragmentManager().executePendingTransactions();
}
else{
fragment_1=(Fragment_1)getSupportFragmentManager().findFragmentByTag("fragment_1");
}
//Simply adding item to the listview contained in fragment_1.
fragment_1.add("Project #1");
fragment_1.add("Project #2");
fragment_1.add("Project #3");
}
//callback of interface "Operations"
@Override
public void buttonClicked() {
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
if (fragment_1.isAdded()){
transaction.remove(fragment_1);
//transaction.addToBackStack(null);
transaction.commit();
getSupportFragmentManager().executePendingTransactions();
}
}
}
好吧,疑问来自于没有 "onSaveInstanceState" 需要实施的事实,一切都得到 "saved" 没有任何问题。
那么,我为什么要使用 putfragment 和 getFragment?是否需要调用这些方法以避免 OS 杀死应用程序进程时它们会丢失?这是我可以想象强制执行 onSaveInstanceState 和 onRestoreInstanceState 方法的唯一原因。
感谢任何帮助。
Activity 和片段生命周期是相关联的,因此当为 activity 调用诸如 onResume 之类的任何回调方法时,它也会为片段调用.
putFragment 和 getFragment 帮助 activity 管理其子片段的生命周期。 activity 还必须保存实例状态。
为了activity独立,片段可以管理自己的实例状态。
我用这段代码实现了一个简单的activity:
public class MainActivity extends AppCompatActivity implements Fragment_1.Operations{
Fragment_1 fragment_1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragmentactivity);
fragment_1=(Fragment_1)getSupportFragmentManager().findFragmentByTag("fragment_1");
}
//called on buttonclick, fired from a button existing in R.layout.fragmentactivity
public void createFragment(View view){
if (getSupportFragmentManager().findFragmentByTag("fragment_1")==null){
fragment_1=new Fragment_1();
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragmentactt,fragment_1,"fragment_1");
transaction.commit();
getSupportFragmentManager().executePendingTransactions();
}
else{
fragment_1=(Fragment_1)getSupportFragmentManager().findFragmentByTag("fragment_1");
}
//Simply adding item to the listview contained in fragment_1.
fragment_1.add("Project #1");
fragment_1.add("Project #2");
fragment_1.add("Project #3");
}
//callback of interface "Operations"
@Override
public void buttonClicked() {
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
if (fragment_1.isAdded()){
transaction.remove(fragment_1);
//transaction.addToBackStack(null);
transaction.commit();
getSupportFragmentManager().executePendingTransactions();
}
}
}
好吧,疑问来自于没有 "onSaveInstanceState" 需要实施的事实,一切都得到 "saved" 没有任何问题。
那么,我为什么要使用 putfragment 和 getFragment?是否需要调用这些方法以避免 OS 杀死应用程序进程时它们会丢失?这是我可以想象强制执行 onSaveInstanceState 和 onRestoreInstanceState 方法的唯一原因。
感谢任何帮助。
Activity 和片段生命周期是相关联的,因此当为 activity 调用诸如 onResume 之类的任何回调方法时,它也会为片段调用.
putFragment 和 getFragment 帮助 activity 管理其子片段的生命周期。 activity 还必须保存实例状态。
为了activity独立,片段可以管理自己的实例状态。