furutatsuのメモ帳

ぼくがソフトウェアを設定したことや組んだプログラムを見返すためのブログです。

Androidアプリの画面遷移

リストをクリックして画面変えたら面白いなと思って作ってみた。

こんなアプリ

リスト項目クリック→いろんな色の画面が表示する
f:id:nyannyanboo:20120716210954p:plain

ソースコード

MainActivity.java

package net.frtts.listviewsample;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity
                            implements OnItemClickListener {

    ArrayAdapter<String> adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1);

        // add some items
        adapter.add("red");
        adapter.add("green");
        adapter.add("blue");
        adapter.add("gray");
        adapter.add("hoge");
        ListView listView =
            (ListView) findViewById(R.id.listView1);

        // ListView set ArrayAdapter
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    // リスト項目をクリック(タッチ)した時に実行するメソッド
    public void onItemClick(AdapterView<?> parent,
                            View view, int pos, long id) {
        Intent intent = new Intent(this, BackColorActivity.class);
        if (intent != null) {
            intent.putExtra("color", adapter.getItem(pos));
            startActivity(intent); // 画面遷移する
        }
    }

}

BackColorActivity.java

package net.frtts.listviewsample;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.RelativeLayout;

public class BackColorActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_back_color);
        
        Bundle extras = getIntent().getExtras();
        String colorString;
        if (extras != null) {
            colorString = extras.getString("color");
        } else {
            colorString = "black";
        }
        RelativeLayout rl =
            (RelativeLayout)findViewById(R.id.RelativeLayout0);
        try {
            rl.setBackgroundColor(Color.parseColor(colorString));
        } catch (IllegalArgumentException e) {
            // 該当する色がない場合
            Log.e("EXCEPTION", e.toString());
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(
            R.menu.activity_back_color, menu);
        return true;
    }
}

activity_main.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:listitem="@android:layout/simple_list_item_1" >
    </ListView>

</LinearLayout>

activity_back_color.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout0"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".BackColorActivity" >

    <TextView
        android:id="@+id/TextView0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/padding_medium"
        android:text="@string/hello_world"
        tools:context=".BackColorActivity" />

</RelativeLayout>

AndroidManifest.xml

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.frtts.listviewsample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action
                  android:name="android.intent.action.MAIN" />
                <category
                  android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".BackColorActivity"
            android:label="@string/title_activity_back_color" >
        </activity>
    </application>

</manifest>

strings.xml

<resources>
    <string name="app_name">ListViewSample</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">ListView</string>
    <string name="title_activity_back_color">BackColorActivity</string>
    <string name="title_activity_edit_add">MainActivity</string>
</resources>

簡単にポイント

Intentで画面を遷移する。
Bundleで遷移元のデータを取る。