this Rating Dialog のいずれかのボタンが押されたときに、以下のコード( このライブラリに属する )を正常に実行したいと思います。どうすればできますか?
_ public void goToPickerActivity() {
Intent intent = new com.sucho.placepicker.PlacePicker.IntentBuilder()
.onlyCoordinates(true) //Get only Coordinates from Place Picker
.showLatLong(true)
.setLatLong(40.71274, -74.005974) // Initial Latitude and Longitude the Map will load into (NYC coordinates)
.setMapZoom(2.5f) // Map Zoom Level. Default: 14.0
.build(this);
startActivityForResult(intent, Constants.PLACE_PICKER_REQUEST);
}
_
編集:goToPickerActivity()
firstを実行し、次にライブラリの目的のコードをクリックします。たとえば、_Rate App
_ボタンがクリックされた場合:
ステップ1は、goToPickerActivity()
を実行します。
それが完了したら、ステップ2は、通常の_Rate App
_クリックされたコードを実行します。
_AppRatingDialog.Builder
_クラスのOnRatingDialogListener
、setRateButtonText
、またはsetRateLaterButtonText
メソッドを使用してsetNeverRateButtonText
を追加することができます。
_final AppRatingDialog appRatingDialog = new AppRatingDialog.Builder(this)
// ... call another setup methods if need
.setRateButtonText("Rate App", new OnRatingDialogListener() {
@Override
public void onClick() {
goToPickerActivity();
}
})
.setRateLaterButtonText("Rate App Later", new OnRatingDialogListener() {
@Override
public void onClick() {
goToPickerActivity();
}
})
.setNeverRateButtonText("Never", new OnRatingDialogListener() {
@Override
public void onClick() {
goToPickerActivity();
}
})
.build();
appRatingDialog.show();
_
ラムダを使用すると、次のようになります。
_final AppRatingDialog appRatingDialog = new AppRatingDialog.Builder(this)
// ... call another setup methods if need
.setRateButtonText("Rate App", () -> goToPickerActivity())
.setRateLaterButtonText("Rate App Later", () -> goToPickerActivity())
.setNeverRateButtonText("Never", () -> goToPickerActivity())
.build();
appRatingDialog.show();
_
編集1:
メソッドopenPlayStore
:
_private void openPlayStore() {
final String storeLink = "market://details?id=" + context.getPackageName();
final Uri marketUri = Uri.parse(storeLink);
try {
mContext.startActivity(new Intent(Intent.ACTION_VIEW, marketUri));
} catch (Android.content.ActivityNotFoundException ex) {
Toast.makeText(mContext, "Couldn't find PlayStore on this device", Toast.LENGTH_SHORT).show();
}
}
_
ライブラリを編集できる場合は、openPlayStore
メソッドをpublic
にして、AppRatingDialog
インスタンスへの参照を変数に保存します。 appRatingDialog
を呼び出し、appRatingDialog.openPlayStore()
を呼び出します。
編集2:
ボタンに異なるリスナーを設定するには、AppRatingDialog
に新しいリスナーを追加して処理する必要があります。
_public class AppRatingDialog extends AppCompatDialog implements View.OnClickListener {
//...
private OnRatingDialogListener onRatingDialogListener;
private OnRatingDialogListener onRateLaterDialogListener;
private OnRatingDialogListener onRateNeverDialogListener;
//...
@Override
public void onClick(View v) {
if (v.getId() == R.id.dialog_rating_button_never_rate) {
savedNeverShow();
dismiss();
if (onRateNeverDialogListener != null) {
onRateNeverDialogListener.onClick();
}
} else if (v.getId() == R.id.dialog_rating_button_rate_later) {
dismiss();
incrementLaunchCount(true);
if (onRateLaterDialogListener != null) {
onRateLaterDialogListener.onClick();
}
} else if (v.getId() == R.id.dialog_rating_button_rate) {
savedNeverShow();
dismiss();
if (onRatingDialogListener != null) {
onRatingDialogListener.onClick();
} else {
openPlayStore();
}
}
}
// ...
public static class Builder {
//...
@NonNull
public Builder setRateLaterButtonText(String rateLaterButtonText, @Nullable OnRatingDialogListener onRateLaterClickListener) {
appRatingDialog.mRateLaterButtonText = rateLaterButtonText;
appRatingDialog.onRateLaterDialogListener = onRateLaterClickListener;
return this;
}
@NonNull
public Builder setNeverRateButtonText(String neverRateButtonText, @Nullable OnRatingDialogListener onNeverRateClickListener) {
appRatingDialog.mNeverRateButtonText = neverRateButtonText;
appRatingDialog.onRateNeverDialogListener = onNeverRateClickListener;
return this;
}
// ...
}
}
_
編集3:
Playストアを開き、同時にリスナーに通知するには:
_public class AppRatingDialog extends AppCompatDialog implements View.OnClickListener {
//...
private OnRatingDialogListener onRatingDialogListener;
private OnRatingDialogListener onRateLaterDialogListener;
private OnRatingDialogListener onRateNeverDialogListener;
//...
@Override
public void onClick(View v) {
if (v.getId() == R.id.dialog_rating_button_never_rate) {
savedNeverShow();
dismiss();
if (onRateNeverDialogListener != null) {
onRateNeverDialogListener.onClick();
}
} else if (v.getId() == R.id.dialog_rating_button_rate_later) {
dismiss();
incrementLaunchCount(true);
if (onRateLaterDialogListener != null) {
onRateLaterDialogListener.onClick();
}
} else if (v.getId() == R.id.dialog_rating_button_rate) {
savedNeverShow();
dismiss();
openPlayStore();
if (onRatingDialogListener != null) {
onRatingDialogListener.onClick();
}
}
}
// ...
}
_
あなたは実際にこれをあなたの元の投稿ですでに答えているようです。
startActivityForResult(intent、Constants.PLACE_PICKER_REQUEST);
_public void goToPickerActivity() {
Intent intent = new com.sucho.placepicker.PlacePicker.IntentBuilder()
.onlyCoordinates(true) //Get only Coordinates from Place Picker
.showLatLong(true)
.setLatLong(40.71274, -74.005974) // Initial Latitude and Longitude the Map will load into (NYC coordinates)
.setMapZoom(2.5f) // Map Zoom Level. Default: 14.0
.build(this);
startActivityForResult(intent, Constants.PLACE_PICKER_REQUEST);
}
_
そこでonActivityResult()
をオーバーライドして、アクティビティが成功したかどうかを判断し、以下のように必要なことを行うことができます
_@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (!(requestCode == 0 && resultCode == RESULT_OK)){
onBackPressed();
}else{
goToPickerActivity()
}
}
_
ライブラリコードを編集できるので、要件に合わせるには、まずappratingdialog
ライブラリコードを変更します。 _AppRatingDialog.Java
_に移動し、onClick(View v)
内で以下のように評価ボタンの条件を変更します。
_if (v.getId() == R.id.dialog_rating_button_rate) {
savedNeverShow();
dismiss();
if (onRatingDialogListener != null) {
onRatingDialogListener.onClick();
openPlayStore(); // Just added this extra line here, others are kept in place
} else {
openPlayStore();
}
}
_
次に、アプリアクティビティ内で、以下のようにsetRateButtonText
を使用して評価ボタンのカスタムクリックリスナーを作成します。
_AppRatingDialog appRatingDialog = new AppRatingDialog.Builder(MainActivity.this)
.setTriggerCount(3)
.setRepeatCount(4)
.setRateButtonText("Rate Now", clickListener)
.build();
appRatingDialog.show();
_
最後に、以下のようにPlacePicker
内にonClick
インテントを持つアプリアクティビティ内にクリックリスナーを実装します。
_OnRatingDialogListener clickListener = new OnRatingDialogListener() {
@Override
public void onClick() {
goToPickerActivity();
}
};
_
次の手順に従ってください:ライブラリモジュールで、次のような_AppRatingDialog.Java
_ add YOURACTIVITY.goToPickerActivity(**boolean**);
をonClick
(行171)メソッドの各ビューに追加します。
_@Override
public void onClick(View v) {
if (v.getId() == R.id.dialog_rating_button_never_rate) {
YOURACTIVITY.goToPickerActivity(false);
savedNeverShow();
dismiss();
if (onRatingDialogListener != null) {
onRatingDialogListener.onClick();
}
} else if (v.getId() == R.id.dialog_rating_button_rate_later) {
YOURACTIVITY.goToPickerActivity(false);
dismiss();
incrementLaunchCount(true);
if (onRatingDialogListener != null) {
onRatingDialogListener.onClick();
}
} else if (v.getId() == R.id.dialog_rating_button_rate) {
YOURACTIVITY.goToPickerActivity(true);
savedNeverShow();
dismiss();
if (onRatingDialogListener != null) {
onRatingDialogListener.onClick();
}
}
}
_
アクティビティで、メソッドgoToPickerActivity()
を次のように変更します。
_private static void goToPickerActivity(boolean isRate) {
Intent intent = new com.sucho.placepicker.PlacePicker.IntentBuilder()
.onlyCoordinates(true) //Get only Coordinates from Place Picker
.showLatLong(true)
.setLatLong(40.71274, -74.005974) // Initial Latitude and Longitude the Map will load into (NYC coordinates)
.setMapZoom(2.5f) // Map Zoom Level. Default: 14.0
.build(this);
if (isRate){
startActivityForResult(intent, Constants.PLACE_PICKER_REQUEST_RATE);
} else {
startActivityForResult(intent, Constants.PLACE_PICKER_REQUEST);
}
_
メソッドonActivityResult
で、リクエストコードが_Constants.PLACE_PICKER_REQUEST_RATE
_と等しいかどうかを確認し、メソッドopenStore()
を呼び出します。
_@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == Constants.PLACE_PICKER_REQUEST_RATE) {
//other code ...
openStore();
}
}
}
private void openStore() {
final Uri storeUri = Uri.parse(mStoreLink); // your app store listing link
try {
startActivity(new Intent(Intent.ACTION_VIEW, storeUri));
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
}
_
ストアページに移動する前に一定の時間待機する場合は、openStore()
にハンドラーを追加できます。
_Handler mHandler = new Handler();
mHandler.postDelayed(() -> {
openStore();
}, 1000); // wait for 1 second
_
クラスを記述して、AppRatingDialog
から拡張するだけです。次に、onClick
メソッドをオーバーライドすることで、必要な操作を実行できます。次に、super.onClick
を呼び出すことにより、ライブラリonClick
メソッドを実行します。
@Override
public void onClick(View v) {
if (v.getId() == R.id.dialog_rating_button_rate) {
goToPickerActivity();
}
super.onClick(v);
}