How to check if a user has already clicked a Button?

删除回忆录丶 提交于 2019-12-23 06:14:15

问题


I have a button in my menu with a “promo code” inside. I need to check if a user already clicked it so I can tell him (the next time he clicks it) “You already redeemed this promo code!” How do I do that? I need only the piece of code where I can check for button clicked.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    boolean clicked = false;
    switch (item.getItemId()) {
        case R.id.getcode: 
            SharedPreferences pref = getSharedPreferences("promo", MODE_PRIVATE);
            boolean activated = pref.getBoolean("activated", false);
            if(activated == false) {  Button btn = (Button) findViewById(R.id.getcode);
            AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(this);
            dlgAlert.setMessage(getString(R.string.congrats) + "\n" + getString(R.string.promcd) + "\n" + "ASC2013-"+Build.ID+"-"+android.os.Build.SERIAL.charAt(3)+"-"+Build.SERIAL.charAt(6)+"-"+Build.SERIAL.charAt(9)+"-"+Build.SERIAL.charAt(12));
            dlgAlert.setPositiveButton(R.string.go,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
                            emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {"lorenzocascio@gmail.com"});
                            emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.validreq)+Build.BOOTLOADER);
                            emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, getString(R.string.why) + "\n" + getString(R.string.validreq1) +"\n"+getString(R.string.dialogMSG1);

                            emailIntent.setType("plain/text");  

                            startActivity(emailIntent);

                        }
                    });
            dlgAlert.setCancelable(true);
            dlgAlert.create().show(); 
                SharedPreferences.Editor editor = pref.edit();
                editor.putBoolean("activated", true);
                editor.commit();
            } 
      break;
    }
      switch (item.getItemId()) {
      case R.id.settings: 
          Intent settings = new Intent(MainActivity.this, Settings.class);
            MainActivity.this.startActivity(settings);


    }
    return true;
}

回答1:


You can save a flag in shared preferences if the user clicks the button. Next time, you can check in the shared preferences if there exists the flag.

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    SharedPreferences pref = getSharedPreferences("promo", MODE_PRIVATE);
    boolean activated = pref.getBoolean("activated", false);
    if(activated == false) {  // User hasn't actived the promocode -> activate it 
        SharedPreferences.Editor editor = pref.edit();
        editor.putBoolean("activated", true);
        editor.commit();
    } 
}



回答2:


How about a simple boolean flag?

Set it to false in the beginning - as soon as the user clicks - set it to true.

private boolean clicked = false; // this is a member variable

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button btn = (Button) findViewById(R.id.button1);

    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if(clicked) {
                 Toast.makeText(getActivity(), "You already clicked!", 1000).show();
            } else {
                 Toast.makeText(getActivity(), "You clicked for the first time!", 1000).show();
            }

            clicked = true;
        }
    }
}

Please be aware that the "clicked" boolean variable must be a member variable of your Activity, otherwise it will not be visible inside onClick(). A variable being a member variable simply means that it belongs to the class it is in, and not just occurs in a specific method. In the above code, "btn" would be a "normal" variable since it only appears inside onCreate() (a method), whereas "clicked" is declared for the Activity (the class it is in), and is therefore a member variable.

If you want to save if the user has clicked even after the app was closed and gets reopened, take a look at the SharedPreferences.

SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);

boolean clicked;

clicked = prefs.getBoolean("yourkey", false); // get a value, use whatever key you want

prefs.edit().putBoolean("yourkey", clicked).commit();  // save a value, use same key


来源:https://stackoverflow.com/questions/18303596/how-to-check-if-a-user-has-already-clicked-a-button

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!