2013-06-18 2 views
1

내 응용 프로그램에는 xml 레이아웃 파일이 많이 있습니다. 이제 15 개의 정의 된 숫자가 활동에 포함되는 기능을 추가하고 싶습니다. 활동이 시작될 때마다 무작위로 15 개의 레이아웃을 선택해야합니다. 어떻게해야합니까? 배열에 대해 생각하고 있었지만 xml 파일을 배열 (임의적)에 포함시키는 방법에 대한 좋은 참조를 찾을 수 없었습니다.안드로이드에서 임의의 xml 레이아웃을 표시하는 방법

답변

6

레이아웃 참조는 int입니다. 당신은 단순히 사용 하나를 선택할 수 있습니다

int[] layouts = new int[] {R.layout.one, R.layout.two, R.layout.three ...}; 

setContentView(layouts[new Random().nextInt(layouts.length)]); 
+0

@downvote, 의견이 있으십니까? – njzk2

+0

-1 : 바로 지금 당신은 가능한 int로 0, 1, 2를 제공합니다. 이것은 레이아웃 ID와 반드시 같을 필요는 없습니다. 'setContentView (layouts [new Random(). nextInt (layout.length)]); ' – tilpner

+0

나는 당신의 제안과 비슷한 방식으로 이미 시도해 보았고 모든 레이아웃을 무작위로 보여주는 데 효과적이다. 하지만 어떻게 동적으로 (?) 내 100 레이아웃 중 임의의 선택 (예를 들어 15)으로 배열에 그것을 정의합니까? – jay

1

당신은 Application.onCreate 또는 메인은 Activity.onCreate에를 오버라이드 (override) 할 수()를하고 SharedPreference에서 원하는 레이아웃의 리소스 ID를 설정합니다.

public static final String LAYOUT_ID = "random.layout.id"; 
private static int[] LAYOUTS = new int[] { R.layout.default, R.layout.fancy }; 

public void onCreate() { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    prefs.edit().putInt(LAYOUT_ID, getRandomLayoutId()).commit(); 
} 

private int getRandomLayoutId() { 
    Random r = new Random(Calendar.getInstance().getTimeInMillis()); 
    return LAYOUTS[r.nextInt(LAYOUTS.length)]; 
} 

이 ID는 setContentView()를 사용하여 앱의 어딘가에서 사용될 수 있습니다.

private static final int DEFAULT_ID = R.layout.default; 

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
setContentView(getInt(MyApplication.LAYOUT_ID, DEFAULT_ID)); 

기본 활동에서 수행하는 경우 오리엔테이션 변경 또는 유사한 이벤트에도 새로운 레이아웃을 적용 할 수 있습니다.

관련 문제