2011年10月30日日曜日

startActivityForResultメソッドのsample code

startActivityForResultメソッドのsample code

処理順序
  1. startActivityForResultメソッドを使い、他のActivityを呼び出す。
  2. 呼び出された側のActivityが必要な処理を行い、処理が終わると、このActivityは終了する。
  3. 呼出元ActivityのonActivityResultメソッドが呼ばれる。
ここに掲載したプログラムは、動作原理を理解するために、学習・実験用に作ったものです。
startActivityForResultメソッドは、例えば、「本体設定」画面から入力された値を取得する場合に有用かもしれません。
参考:「本体設定」の「音の設定」画面を表示する

呼び出す側
public class ForResultActivity extends Activity
implements
OnClickListener
{
final String TAG = "My";
static final int PICK_CONTACT_REQUEST = 0;
Button bu;
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    bu = (Button)findViewById(R.id.Button);
    bu.setOnClickListener(this);
}

@Override
public void onClick(View v){
    if(v==bu){
        Intent it;
        it = new Intent(this, WorkerActivity.class);
        try{
            startActivityForResult(it, PICK_CONTACT_REQUEST);
        }
        catch(ActivityNotFoundException e){
            Log.e(TAG, "ActivityNotFoundException");
        }
    }
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==PICK_CONTACT_REQUEST){
        //「戻る」キーの押し下げでも、ここに来る。

        if(resultCode==RESULT_OK){
            //「戻る」キーの押し下げでは、ここには来ない。
            Log.i(TAG, "RESULT_OK");
            Log.i(TAG, data.getStringExtra("What are these?"));
            Log.i(TAG, String.valueOf(data.getIntExtra("How many pens?", -1)));
        }
    }
}
}

呼び出される側
public class WorkerActivity extends Activity{
    final String TAG = "My";
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.work);
        Log.i(TAG, "WorkerActivity");
        Intent data;
        data = new Intent();
        data.putExtra("What are these?", "These are pens.");
        data.putExtra("How many pens?", 3);
        setResult(RESULT_OK, data);
        finish();
    }
}

0 件のコメント:

コメントを投稿