web-dev-qa-db-ja.com

ダイアログのボタンが押されたときに別のアクティビティを開きますか?

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_クリックされたコードを実行します。

8
Panjeet

_AppRatingDialog.Builder_クラスのOnRatingDialogListenersetRateButtonText、または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();
            }   
        }
    }

    // ...
}
_
0
Sergey

あなたは実際にこれをあなたの元の投稿ですでに答えているようです。

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()
    }
}
_
0
TDIScott

ライブラリコードを編集できるので、要件に合わせるには、まず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();
    }
};
_
0
Rakibul Islam

次の手順に従ってください:ライブラリモジュールで、次のような_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
_
0
Mohd

クラスを記述して、AppRatingDialogから拡張するだけです。次に、onClickメソッドをオーバーライドすることで、必要な操作を実行できます。次に、super.onClickを呼び出すことにより、ライブラリonClickメソッドを実行します。

@Override
    public void onClick(View v) {
        if (v.getId() == R.id.dialog_rating_button_rate) {
            goToPickerActivity();
        }
        super.onClick(v);
    }
0
Shayan D