2010年9月6日月曜日

Android 別のアクティビティを開く(戻り値を受け取らない)

Android プロジェクトに新しいアクティビティを追加する で作成したSubActivityに、MainActivityで入力した値を渡して開きます。


MainActivityでEditTextに値を入力し次へをクリックする。

SubActivityを開き、MainActivityで入力した値をTextViewに表示する。


別のアクティビティを開くにはインテント(Intent)クラスを使用します。

Intentクラスのコンストラクタの第1引数に現画面アクティビティのインスタンス、第2引数に呼び出すアクティビティのクラスを指定して
Intentインスタンスを作成します。
Intent(Context packageContext, Class cls)

IntentインスタンスのputExtra()メソッドを使って、アクティビティに渡したい値を指定します。
値はMapで保持されているので、キーと値のペアで設定します。
public Intent putExtra (String name, String value)

ActivityインスタンスのstartActivity()メソッドを使ってアクティビティを起動します。
public void startActivity (Intent intent)


開いたアクティビティでは
ActivityインスタンスのgetIntent()メソッドでIntentインスタンスを取得します。
public Intent getIntent ()

IntentインスタンスのgetExtras()メソッドで渡された値のMapを取得します。
public Bundle getExtras ()



MainActivity.java
package my.study.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button buttonNext = (Button)findViewById(R.id.buttonNext);
        buttonNext.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                buttonNext_OnClickListener(v);    
            }});
    }
    
    /*
     * 次へボタンクリック処理
     */
    public void buttonNext_OnClickListener(View v) {
        //SubActivityを起動します。
        EditText textInput = (EditText)findViewById(R.id.textInput);
        Intent intent = new Intent(this,SubActivity.class);
        intent.putExtra("INPUT_STRING", textInput.getText().toString());
        startActivity(intent);
    }
}

SubActivity.java
package my.study.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SubActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);
  
        TextView labelInput = (TextView)findViewById(R.id.labelInput);
        //インテントより渡された値を取得します。
        Intent intent = getIntent();
        Bundle extras = intent.getExtras();
        if (extras != null){
            labelInput.setText(extras.getString("INPUT_STRING"));
        }else{
            labelInput.setText("extra is null");   
        }
  
    }

}

MainActivityのレイアウト(res/layout/main.xml)
<?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"
    >

<EditText 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:id="@+id/textInput">
</EditText>

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/buttonNext" 
    android:text="次へ">
</Button>

</LinearLayout>

SubActivityのレイアウト(res/layout/sub.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">

<TextView android:
    layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/labelInput" 
    android:text='"入力した値:"'>
</TextView>
</LinearLayout>

0 件のコメント: