我正在测试系统由于 RAM 不足而终止应用程序进程后用户进入我的应用程序的情况。我看到意想不到的行为并希望得到一些帮助。
在我的应用程序中,我有一个活动,我们称之为ActivityA
,立即创建一个片段,Fragment A
,并进行片段替换。FragmentA
显示一个ListView
里面有两个项目。如果用户单击第一个项目,即第二个片段,Fragment B
被创建并替换FragmentA
。否则,另一个FragmentA
被创建并替换原来的FragmentA
。我正在尝试创建一个文件目录树。FragmentA
用于目录,并且FragmentB
用于文件。
假设用户单击一个文件。这是测试中的阶段,用户切换到另一个应用程序,系统由于内存不足而终止我的应用程序的进程。然后,用户返回我的应用程序,希望一切都保持原样。然而,实际发生的情况是Fragment A
(父目录)正在显示,而不是Fragment B
(文件)。当用户点击后退按钮时,Fragment B
然后显示(文件)。我做错了什么导致系统以这种方式恢复后台堆栈?
这是一个示例程序,进一步展示我的应用程序正在做什么:
// ActivityA.java
public class ActivityA extends AppCompatActivity implements onItemClickListener
{
@Override
public void onCreate(Bundle savedInstanceState)
{
FragmentA fragA = new FragmentA();
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransation.replace(R.id.basic_frame, fragA);
fragmentTransaction.commit();
}
@Override
public void onItemClick(AdapterView<?> aView, View v, int position, long id)
{
if (position == 0)
{
FragmentB fragB = new FragmentB();
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransation.replace(R.id.basic_frame, fragB);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
else
{
FragmentB fragA = new FragmentA();
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransation.replace(R.id.basic_frame, fragA);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
}
你打电话时super.onCreate()
,片段自动恢复其当前状态savedInstanceState
不为空。
因此,如果您希望通过添加初始片段来完成一次设置,那么您应该始终用一个if (savedInstanceState == null)
check:
@Override
public void onCreate(Bundle savedInstanceState)
{
// I assume you accidentally left out these lines
super.onCreate(savedInstanceState);
setContentView(R.id.your_content_view);
if (savedInstanceState == null) {
FragmentA fragA = new FragmentA();
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransation.replace(R.id.basic_frame, fragA);
fragmentTransaction.commit();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)