【问题标题】:How to check if a user has already clicked a Button?如何检查用户是否已经点击了按钮?
【发布时间】:2013-08-20 15:32:27
【问题描述】:

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

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

【问题讨论】:

    标签: android boolean sharedpreferences android-button buttonclick


    【解决方案1】:

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

    在开始时将其设置为 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
    

    【讨论】:

    • 感谢您的快速回复……您能分享一些代码吗?谢谢
    • 您还应该将布尔值保存在某处,因此在重新启动应用程序后该变量仍设置为 true。您可能想使用Shared Preference
    • 谢谢@David...我该怎么做?
    • @Phil 您的回答将在 8 分钟内被接受。抱歉,我是新会员! :(
    • 编辑:我完全愚蠢,我改变了 ELSE 的位置...... :)
    【解决方案2】:

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

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

    【讨论】:

    • 不起作用... :( 我总是可以点击 btn .. 即使使用新版本的代码...
    • 代码只是在共享首选项中保存了一个标志。如果用户尚未激活促销代码,您将遇到 if 子句。在那里你可以做一些事情来告诉用户他已经激活了代码,例如显示一个 toast。
    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多