我对片段的主题进行了咨询,并希望我可以帮助我,我创建了两个用于控制方向(纵向和横向)的布局,并且都调用了相同的片段片段。 当我在一个方向(肖像)中运行一些例程是可以的,但是当更改发生方向时,对象被“重新启动”或“重新生成”,我读到这可以通过使用savedInstanceState()验证生成的实例来纠正,但感谢您的帮助
问候。
PS:抱歉我的英文
public class AlbumDetail extends Activity {
....
private Bundle bundle = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.bundle = savedInstanceState;
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setContentView(R.layout.albumdetail_p);
initUI();
} else {
setContentView(R.layout.albumdetail_l);
initUI();
}
lstSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
pos = position;
if (bundle == null){
PlayFragment fragment = (PlayFragment) getFragmentManager().findFragmentById(R.id.fragmentPlay);
if (fragment != null && fragment.isInLayout()) {
fragment.getPlaySong(pos,isRandom,songs);
}
}
}
});
}
private void initUI(){
/* Initialize variables */
}
}
public class PlayFragment extends Fragment{
private Intent playIntent;
private View view;
....... //Variables
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragmentplay, container, false);
return view;
}
public void onSaveInstanceState(Bundle bundle){
super.onSaveInstanceState(bundle);
}
public void initUI(){
/* Initialize variables*/
}
public void getPlaySong(int position, boolean isRandom, Object lstSong) {
initUI();
try {
playIntent = new Intent(getActivity().getBaseContext(), PlaySongServiceFragment.class);
playIntent.putExtra("pos", position);
playIntent.putExtra("rnd", isRandom);
playIntent.putExtra("list", (Serializable) lstSong);
getActivity().startService(playIntent);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
答案 0 :(得分:2)
有一种更简单的方法可以做到这一点。特别是如果您在布局中使用所有相同的子项(片段)。
将纵向布局放在layout
文件夹中。将景观布局与“{1}}文件夹中的相同名称放在一起。”确保布局中的所有子项都具有相同的ID(如果您使用相同或类似的子项)。
然后你可以在你的layout-land
中处理它,好像它只是一个布局,让设备选择使用哪个。