2011年2月5日土曜日

Android 複数画面 1 Activity で画面遷移

1画面 1Activity は設計も実装も楽なんですけど、なんせ Activity 間の遷移は時間がかかります。一瞬待たされるよね? setContentView() を使って画面遷移を実現すると、待たされることはなくなります。

では、コード。

R.layout.main -> R.layout.first -> R.layout.second -> finish




という画面遷移になっています。


package yanzm.products.screentransition.lib;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

static final private String prefName = "MY_PREF";
private int mScreenId = R.layout.main;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

SharedPreferences prefs = getSharedPreferences(prefName, Context.MODE_PRIVATE);
int screenId = prefs.getInt("screenId", R.layout.main);

setScreenContent(screenId);
}

@Override
public void onDestroy() {
super.onDestroy();
SharedPreferences prefs = getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("screenId", mScreenId);
editor.commit();
}

private void setScreenContent(int screenId) {
mScreenId = screenId;
setContentView(screenId);

switch (screenId) {
case R.layout.first: {
setFirstScreenContent();
break;
}
case R.layout.second: {
setSecondScreenContent();
break;
}
case R.layout.main: {
setMainScreenContent();
break;
}
}
}

private void setMainScreenContent() {
Button backButton = (Button) findViewById(R.id.back);
backButton.setVisibility(View.INVISIBLE);

Button nextButton = (Button) findViewById(R.id.next);
nextButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setScreenContent(R.layout.first);
}
});
}

private void setFirstScreenContent() {
Button backButton = (Button) findViewById(R.id.back);
backButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setScreenContent(R.layout.main);
}
});

Button nextButton = (Button) findViewById(R.id.next);
nextButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setScreenContent(R.layout.second);
}
});
}

private void setSecondScreenContent() {
Button backButton = (Button) findViewById(R.id.back);
backButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setScreenContent(R.layout.first);
}
});

Button nextButton = (Button) findViewById(R.id.next);
nextButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish();
}
});
}
}


R.layout.main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="This is main contents"
/>
<include layout="@layout/back_next" />
</LinearLayout>


R.layout.first

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="this is first contents"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon"
/>
</LinearLayout>
<include layout="@layout/back_next" />
</LinearLayout>


R.layout.second

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="this is second contents"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon"
/>
</LinearLayout>
<include layout="@layout/back_next" />
</LinearLayout>


R.layout.back_next

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button
android:id="@+id/back"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Back"
/>
<Button
android:id="@+id/next"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Next"
/>
</LinearLayout>




 

1 件のコメント:

  1. 複数画面 1 Activity で画面遷移する方法は、簡単でいい方法ですね。初心者なので感心しました。
    andoroidoの、どのドキュメントのどのあたりに、この方法が載っているのでしょうか。
    教えていただけませんか。よろしくお願いします。

    返信削除