片段有两种布局

时间:2013-05-30 17:20:43

标签: android service fragment

我对片段的主题进行了咨询,并希望我可以帮助我,我创建了两个用于控制方向(纵向和横向)的布局,并且都调用了相同的片段片段。 当我在一个方向(肖像)中运行一些例程是可以的,但是当更改发生方向时,对象被“重新启动”或“重新生成”,我读到这可以通过使用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();
    }
}

}

1 个答案:

答案 0 :(得分:2)

有一种更简单的方法可以做到这一点。特别是如果您在布局中使用所有相同的子项(片段)。

将纵向布局放在layout文件夹中。将景观布局与“{1}}文件夹中的相同名称放在一起。”确保布局中的所有子项都具有相同的ID(如果您使用相同或类似的子项)。

然后你可以在你的layout-land中处理它,好像它只是一个布局,让设备选择使用哪个。