個人解読Activityの3



このセクションでは、Activitiesを起動し、結果を得るという議題について説明します.前のセクションでは、あるActivityで別のActivityを起動することを実現しましたが、startActivity()というメソッドを呼び出して起動しただけで、その後は管理されませんでしたが、電話帳から連絡先レコードを選択し、新しいActivityを作成してこのレコードの詳細を表示する場合は、これは、2番目のActivityに関連し、ユーザーが最初のActivityでどのレコードを選択したかを知る必要があります.これは、2つのActivity間でデータを転送することに関連しています.このような状況はよくあります.
ここでは、最初のActivityにリストビューを表示し、いくつかのレコードを表示する例も示します.その後、各エントリにリスナーを設定しますが、任意のエントリをクリックすると、2番目のActivityに前に選択したエントリの詳細が表示されます.
ステップ1:新規プロジェクト:Activity Res;
ステップ2:Activity Resを変更します.JAvaファイル、以下に示します.
      
/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        
        String[] str = {"WuHan", "QingDao", "YuCi"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,str);
        setListAdapter(adapter);
    }
    
    @Override
    protected void onListItemClick (ListView l, View v, int position, long id)
    {
    	super.onListItemClick(l, v, position, id);
    	switch(position)
    	{
    	case 0:
    		Bundle bundle = new Bundle();
    		bundle.putString("name", "WuHan");
    		bundle.putString("school", "XXX");
    		bundle.putString("student", "XXX");
    		Intent intent = new Intent(ResultActivity.this, SecondActivity.class);
    		intent.putExtras(bundle);
    		startActivity(intent);
    	}
    }
手順3:2番目のactivity:SecondActivityを作成します.コードは次のとおりです.
	private TextView TextView01;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView01 = (TextView)findViewById(R.id.TextView01);
        Intent intent = this.getIntent();
        Bundle bundle = intent.getExtras();
        TextView01.setText(bundle.getString("name")+":"+bundle.getString("school")+":"+bundle.getString("student"));

    }
手順4:アプリケーションを実行すると、次の結果が表示されます.
   
以上は2つのActivity間のデータ転送で、取得結果について見てみましょう!
起動したactivityから結果を取得する必要がある場合があります.この場合、startActivity()メソッドではなくactivityメソッドを起動するためにstartActivity()メソッドを呼び出す必要があります.その後起動したActivityから結果を得るためには、onActivity Result()というコールバック関数を完了する必要があります.指定したactivityの起動が完了すると、intentオブジェクトを介してonActivity Result()メソッドに結果が返されます.たとえば、連絡先からレコードを取得する必要があります.そのため、このレコードに対して他の操作を行うことができます.次のように結果を返すIntentを作成し、この結果を処理することができます.
       
private void pickContact() {
    // Create an intent to "pick" a contact, as defined by the content provider URI
    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
        // Perform a query to the contact's content provider for the contact's name
        Cursor cursor = getContentResolver().query(data.getData(),
        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
        if (cursor.moveToFirst()) { // True if the cursor is not empty
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex);
            // Do something with the selected contact's name...
        }
    }
}