Weitere ähnliche Inhalte Ähnlich wie OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ! (20) Mehr von Shinobu Okano (20) Kürzlich hochgeladen (12) OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!5. Do you know onActivityResult?
https://developer.android.com/
training/basics/intents/result.html
Getting a Result from an Activity
6. Getting a Result from an Activity
// Start the Activity
static final int PICK_CONTACT_REQUEST = 1; // The request code
private void pickContact() {
Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}
// Receive the Result
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
// ...
}
}
}
8. 某フリマアプリ onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case LOGIN:
if(resultCode == RESULT_OK) {
success();
} else {
failed();
}
break;
}
}
9. @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode != RESULT_OK) return;
switch (requestCode) {
case REQUEST_MUGAMUGA:
successItemPost();
break;
}
}
某フリマアプリ onActivityResult
10. @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK || data == null) {
mugemuge();
return;
}
if (requestCode == Request.UMUUMU) {
umuumu();
}
}
某フリマアプリ onActivityResult
11. @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_CANCELED) {
cancel();
} else if (requestCode == REQUEST_CODE_SELECT_IMAGE) {
// ....
} else if (requestCode == REQUEST_CODE_TRIMMING) {
// ....
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
某フリマアプリ onActivityResult
12. @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_MUGAMUGA && resultCode == Activity.RESULT_OK) {
if (data != null) {
mugamuga();
}
}
}
某フリマアプリ onActivityResult
13. @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
return;
}
switch (requestCode) {
case REQUEST_CODE_CATEGORY:
// ...
break;
case REQUEST_CODE_LOCATION:
// ...
break;
case REQUEST_CODE_CONDITION:
// ...
break;
default:
super.onActivityResult(requestCode, resultCode, data);
break;
}
}
某フリマアプリ onActivityResult
21. 受け取ったあとの実装は??
@OnActivityResult(requestCode = REQUEST_TAKE_PHOTO, resultCodes = RESULT_OK)
void onTakePhoto(@ExtraString(name = CameraActivity.RESULT_TAKE_PHOTO)
final String takePhoto) {
Intent resultIntent = new Intent();
resultIntent.putExtra(RESULT_TAKE_PHOTO, takePhoto);
setResult(RESULT_CODE_TAKE_PHOTO, resultIntent);
finish();
}
26. onActivityResultの結果を
ViewModelで受け取る
private MySampleMainViewModel viewModel = new MySampleMainViewModel();
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ActivityResult.onResult(requestCode, resultCode, data).into(viewModel);
}
public class MySampleMainViewModel {
public ObservableField<String> location = new ObservableField<>("0,0");
@OnActivityResult(requestCode = MySampleMainActivity.REQUEST_SELECT_LOCATION,
resultCodes = Activity.RESULT_OK)
void onSelectedLocation(@Extra(name = LocationSelectActivity.RESULT_SELECT_LOCATION) Location location) {
this.location.set(location.toString());
}
}
28. Do you know Activity.RESULT_FIRST_USER?
• Start of user-defined activity results.
• Constant Value: 1 (0x00000001)
• https://developer.android.com/reference/android/
app/Activity.html#RESULT_FIRST_USER
33. OnActivityResultで実装すると…
// ImageSelectActivity
static final int RESULT_CODE_SELECT_IMAGE = Activity.RESULT_FIRST_USER;
static final int RESULT_CODE_TAKE_PHOTO = Activity.RESULT_FIRST_USER + 1;
@OnActivityResult(requestCode = REQUEST_SELECT_IMAGE,
resultCodes = ImageSelectActivity.RESULT_CODE_SELECT_IMAGE)
void onSelectImage(Intent intent) {
ArrayList<String> selectImages = intent.getStringArrayListExtra(RESULT_SELECT_IMAGES);
Toast.makeText(this, "onSelectImage selectImages : " + selectImages, Toast.LENGTH_SHORT).show();
}
@OnActivityResult(requestCode = REQUEST_SELECT_IMAGE,
resultCodes = ImageSelectActivity.RESULT_CODE_TAKE_PHOTO)
void onTakePhoto(@ExtraString(name = ImageSelectActivity.RESULT_TAKE_PHOTO) final String takePhoto) {
Toast.makeText(this, "onTakePhoto takePhoto : " + takePhoto, Toast.LENGTH_SHORT).show();
}
34. Support user defined result code
https://github.com/vanniktech/
OnActivityResult/pull/86
俺が!
OnActivityResultでActivity.RESULT_FIRST_USER
使えるようにしてやったぞ!