如何检查用户是否已经点击了按钮?

时间:2013-08-18 20:57:51

标签: android boolean sharedpreferences android-button buttonclick

我需要检查用户是否已经点击了一个按钮...我的菜单中有一个按钮,里面有“促销代码”...我需要检查用户是否已经点击它以便我可以告诉他(下次他点击它)“You already redeemed this promo code!”我该怎么做?我只需要一段代码,我可以检查点击按钮。

PS:alredy搜索了整个网络!

谢谢!

编辑:我的代码如下。希望它能帮助别人......

@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;
}

2 个答案:

答案 0 :(得分:4)

一个简单的布尔标志怎么样?

在开始时将其设置为false - 只要用户点击 - 将其设置为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;
        }
    }
}

请注意,“clicked”布尔变量必须是Activity的成员变量,否则将无法在onClick()中显示。变量为成员变量只是意味着它属于它所在的类,而不仅仅发生在特定的方法中。在上面的代码中,“btn”将是一个“普通”变量,因为它只出现在onCreate()(方法)中,而“clicked”是为Activity(它所在的类)声明的,因此是一个成员变量

如果您希望保存,如果用户点击了,即使应用已关闭并重新开启,请查看 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

答案 1 :(得分:3)

如果用户单击按钮,您可以在共享首选项中保存标记。下次,如果存在标记,您可以签入共享首选项。

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();
    } 
}