Android fragments 如何限制a";对该应用程序进行评分”;不断展示的碎片

Android fragments 如何限制a";对该应用程序进行评分”;不断展示的碎片,android-fragments,global-variables,android-dialogfragment,activity-finish,Android Fragments,Global Variables,Android Dialogfragment,Activity Finish,我想要一个片段,当用户关闭我的应用程序时,它会要求用户对其进行评分。该片段工作正常,但可能会很烦人,尤其是在用户关闭应用程序的前几次出现时。我希望他们在应用程序出现之前使用它,比如说5次。如何使用全球持有者实现这一点?这是我提出的解决方案。我相信每个人都会告诉我使用globals并不是最好的方法。但这对我很有效。在我的主要活动中,我输入了以下代码: @Override public void onBackPressed() { int theCount = globalHolder.

我想要一个片段,当用户关闭我的应用程序时,它会要求用户对其进行评分。该片段工作正常,但可能会很烦人,尤其是在用户关闭应用程序的前几次出现时。我希望他们在应用程序出现之前使用它,比如说5次。如何使用全球持有者实现这一点?

这是我提出的解决方案。我相信每个人都会告诉我使用globals并不是最好的方法。但这对我很有效。在我的主要活动中,我输入了以下代码:

  @Override
public void onBackPressed() {
    int theCount = globalHolder.getCounter();
    globalHolder.setCounter(theCount++);
    if (globalHolder.getStop() == 1) {

        finish();
    } else if (theCount == 5 || theCount == 10 || theCount == 25) {
        globalHolder.setCounter(theCount++);
        final DialogFragment rate = new RateMe();
        rate.show(getSupportFragmentManager(), "Rate");
    } else {
        globalHolder.setCounter(theCount++);
        finish();
    }
}
现在,让我解释一下。第一个全局变量是计数器。我添加这个是因为我想记录用户使用该应用程序的次数。你马上就会明白为什么了。计数器初始化为0。因为用户是第一次访问程序,所以我增加了计数器

下一行代码是为了不打扰那些不想给应用打分或者已经同意给应用打分的用户。这就是你所能做的。你无法判断他们是否真的对应用进行了评分,但你可以确定他们是否按下了按钮。因此,我不得不假设,由于他们按下了“是”按钮,他们实际上对应用程序进行了评级。现在我想停止显示片段。所以我建立了另一个叫…停止。我将全局设置为“0”(表示“否”)。是的,我用了int,这是我的选择。你想用什么就用什么。因此,当全局变量更改为“1”时,它将递增计数器,然后关闭程序

“else if”是我设置片段显示时间限制的地方。它设置为仅在用户第5次、第10次和第25次使用应用程序时显示片段。如果他们在第25次使用之前还没有对应用程序进行评级,那么他们很可能不会这么做。从这一点开始,计数器再次递增(稍后您将看到原因),片段显示在上面的计数上

下一个“else”递增计数器并关闭程序

片段是:

public class RateMe extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setCancelable(false);
    builder.setTitle("Rate Me");
    builder.setMessage(R.string.Rate);
    builder.setPositiveButton("Yes, I Will", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            ((MainActivity)getActivity()).globalHolder.setStop(1);
            Uri uri = Uri.parse("market://details?id=wolfEnterprisesLLC.motg&hl=en");
            Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri);
            myAppLinkToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                    Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
            try {
                startActivity(myAppLinkToMarket);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(getContext(), " unable to find market app", Toast.LENGTH_LONG).show();
            }
        }
    });
    builder.setNeutralButton("Please Do Not Ask Again", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            ((MainActivity)getActivity()).globalHolder.setStop(1);
            getActivity().finish();
        }
    });
    builder.setNegativeButton("Not Now", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            getActivity().finish();
        }
    });
    return builder.create();
}
}

  • 正点击时,名为“停止”的全局设置为“1”。从这一点上,用户将被发送到Play Store对应用程序进行评分

  • 如果用户不想再次被询问,用户可以按下的“空档”按钮也会将全局“停止”设置为“1”。从这里节目结束。再次将global设置为“1”,将阻止将来出现片段

  • “非现在”的负按钮关闭程序。回顾一下主要活动还记得柜台吗?这就是我希望计数器继续运行的原因。因此,如果按下否定按钮,它仍将保持计数,并要求他们在10日和25日再次使用,以便在必要时对应用程序进行评级

最后,在我的应用程序类中,我添加了:

int stop;
 int counter;

public int getStop() {
    return stop;
}

public void setStop(int stop) {
    this.stop = stop;
}

public int getCounter() {
    return counter;
}

public void setCounter(int counter) {
    this.counter = counter;
}
所以我帮助这个帮助别人

:)