2013-05-30 2 views
0

조각의 주제에 대한 상담을 받았고 도와 드릴 수 있기를 바랍니다. 오리엔테이션 (세로 및 가로)을 제어하는 ​​데 사용하는 두 개의 레이아웃을 작성했으며 두 클래스 모두 같은 클래스 조각을 호출합니다. 오리 엔테이션 (세로)에서 루틴을 실행하고 있지만 괜찮 았지만 오리 엔테이션이 변경되면 객체가 "다시 시작"되거나 "다시 생성"됩니다.이 인스턴스는 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(); 
    } 
} 

}

답변

2

이 작업을 수행 할 수있는 쉬운 방법이 있습니다. 특히 레이아웃에서 동일한 하위 항목 (조각)을 모두 사용하는 경우

layout 폴더에 세로 레이아웃을 넣으십시오. layout-land 폴더에 인물 사진과 동일한 이름의 가로 레이아웃을 넣으십시오. 레이아웃에있는 모든 하위 항목의 ID가 동일한 지 확인하십시오 (동일하거나 유사한 하위 항목을 사용하는 경우).

그러면 단지 하나의 레이아웃 인 것처럼 Activity에서 처리하고 사용할 장치를 선택하게 할 수 있습니다.

+0

오른쪽으로, 내가 무엇을 나타내는 지 검토하겠습니다. 나는 의견을 말하면서 고마워. –

관련 문제