個人解読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...
}
}
}