-3

Мне нужно проверить, если пользователь уже нажал кнопку ... У меня есть кнопка в моем меню с «промо-кодом» внутри ... Мне нужно проверить, если пользователь уже щелкнул его, чтобы я мог сказать ему (в следующий раз, когда он нажимает это) “You already redeemed this promo code!” Как мне это сделать? Мне нужна только часть кода, где я могу проверить, нажата ли кнопка.Как проверить, что пользователь уже нажал кнопку?

PS: alredy искал всю сеть для этого!

Спасибо!

EDIT: мой код ниже. Надеюсь, это поможет другим ...

@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[] {"[email protected]"}); 
          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; 
} 

ответ

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

Не работает ... :(Я всегда могу нажать на btn .. Даже с новой версией вашего кода ... – user2606414

+0

Код просто сохраняет флаг в общих настройках. Если пользователь еще не активировал промокод, вы столкнетесь с if-предложением. Там вы можете сделать что-то, чтобы показать пользователю, что он активировал код, например, показать тост. – Namenlos

+0

Спасибо за тяжелую работу в любом случае ... – user2606414

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

Пожалуйста, обратите внимание, что «щелкнул» булева переменная должна быть переменной членом вашей деятельности, в противном случае он будет не будет виден внутри 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 
+0

Спасибо за быстрый ответ ... можете ли вы поделиться каким-то кодом? Спасибо – user2606414

+1

Я обновил ответ, см. Код. –

+0

Вы также должны сохранить логическое значение где-то, поэтому переменная по-прежнему установлена ​​в true после перезапуска приложения. Возможно, вы захотите сделать это с помощью [Общие предпочтения] (http://developer.android.com/guide/topics/data/data-storage.html#pref) – David