2012年4月25日水曜日

Dialog

メッセージを表示するためにAlertDialogクラスや、進捗状況を示すProgressDialogクラス(STYLE_SPINNER/STYLE_HORIZONTAL)を使いました。日付や時刻を選択するDatePickerDialogクラスやTimePickerDialogクラスも使いましたね。

これらはDialogクラスを継承した派生クラスです。今回はDialogクラスを使ってメッセージを表示します。

まず、メイン画面です。

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <Button
        android:id="@+id/open_dialog_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Open Dialog"
        />
</LinearLayout>
ボタンをひとつ用意しています。

2012年4月18日水曜日

Activityの呼び出し(4)

アクティビティに値を渡す方法は前回紹介しましたので、今回はその逆、呼び出したアクティビティから値を受け取る方法を紹介します。

呼び出し元は、前々回の「Activityの呼び出し(2)」と同じく、startActivityForResult()とonActivityResult()を使います。

いつもとは順番が違いますが、まず呼び出される側のソースから。

SubActivity.java
package jp.co.triware.samples.ActivityTest4a;

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

public class SubActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);

        Intent intent = getIntent();
        String pkg = getPackageName();
        String buf = intent.getStringExtra(pkg + ".input");
        EditText et = (EditText)findViewById(R.id.text_et);
        et.setText(buf);

        Button btnClose = (Button)findViewById(R.id.close_btn);
        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText et = (EditText)findViewById(R.id.text_et);
                String buf = et.getText().toString();
                Intent intent = new Intent();
                String pkg = getPackageName();
                intent.putExtra(pkg + ".return", buf);
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }
}

2012年4月11日水曜日

Activityの呼び出し(3)

アクティビティを呼び出したり、アクティビティから戻り値を取得する方法は、前回までに説明しました。
今回は、呼び出した先のアクティビティに値を渡す方法を紹介します。

値を渡すには、インテント(のインスタンス)に値をセットしてstartActivity()やstartActivityForResult()を呼び出します。インテントに値をセットする方法は、putExtra()メソッドに数値や文字列、配列等を、キーワードと共に指定します。

以下は、テキストを入力して、それを別のアクティビティで表示するサンプルです。

ActivityTest3aActivity.java
package jp.co.triware.samples.ActivityTest3a;

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 ActivityTest3aActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnOpen = (Button)findViewById(R.id.open_btn);
        btnOpen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText et = (EditText)findViewById(R.id.text_et);
                String buf = et.getText().toString();
                Intent intent = new Intent();
                intent.setClass(getApplicationContext(), SubActivity.class);
                String pkg = getPackageName();
                intent.putExtra(pkg + ".input", buf);
                startActivity(intent);
            }
        });
    }
}

2012年4月4日水曜日

Activityの呼び出し(2)

アクティビティを呼び出すにはstartActivity()メソッドを使いました。これは単純にアクティビティを呼び出すだけのものでした。
呼び出した先のアクティビティが終了した状況、例えば一通りの処理が完了して終了したのか、キャンセルして終了したのかを知りたい時は、startActivityForResult()メソッドを使います。

ActivityTest2aActivity.java
package jp.co.triware.samples.ActivityTest2a;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class ActivityTest2aActivity extends Activity {
    private static final String TAG = "MainActivity";

    private static final int REQUEST_SUB_ACTIVITY = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnOpen = (Button)findViewById(R.id.open_btn);
        btnOpen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "OPEN button clicked!");
                Intent intent = new Intent();
                intent.setClass(getApplicationContext(), SubActivity.class);
                startActivityForResult(intent, REQUEST_SUB_ACTIVITY);
                Log.d(TAG, "after startActivityForResult()");
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_SUB_ACTIVITY) {
            String buf = "Unknown";
            switch (resultCode) {
            case RESULT_OK:
                buf = "OK";
                break;
            case RESULT_CANCELED:
                buf = "Cancel";
                break;
            default:
                break;
            }
            Log.d(TAG, "onActivityResult: " + buf);
            Toast.makeText(getApplicationContext(), buf, Toast.LENGTH_LONG).show();
        }
    }
}