MainActivity会像这样膨胀一个片段:
getSupportFragmentManager().beginTransaction()
.replace(R.id.dashboard_fragment_container, df, TAG_DASHBOARD_FRAGMENT)
.commit();
但是当屏幕方向改变时,我希望删除(破坏)这个片段。
检测屏幕即将更改的任何简单方法,以便我可以删除膨胀的碎片?
答案 0 :(得分:2)
尝试使用onConfigurationChanged()方法。它将检测屏幕方向的变化。
S(0,j) = if j is odd then b[j] + S(0,j-1) else S(0,j-1) [j>0]
S(i,0) = if i is odd then a[i] + S(i-1,0) else S(i-1,0) [i>0]
S(0,0) = max(S(0,1), S(1,0))
在onCreate()中设置这些条件,因为方向更改将再次调用onCreate()方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
//remove fragment
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
让我知道这是否有效。
答案 1 :(得分:0)
Fragments
通常会在configuration
更改时重新创建。如果您不希望发生这种情况,请使用
setRetainInstance(true);
这将导致在配置更改期间保留片段。
现在,当由于方向更改而重新启动Activity时,Android Framework会自动重新创建并添加片段。
如果您想在configuration更改使用期间删除片段:
在活动
中 @Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
同样在Manifest:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
现在在Activity的onCreate()中使用:
删除片段 Fragment f = getSupportFragmentManager().findFragmentById(R.id.content_frame); //your fragment
if(f == null){
//there is no Fragment
}else{
//It's already there remove it
getSupportFragmentManager().beginTransaction().remove(f).commit();
}