2014-01-10 3 views
1

Я делаю систему входа на Android. И я хочу, чтобы регистр Button был неприступным, когда он был нажат. Я использую этот код:Как сделать кнопку навсегда unclickable

final Button register = (Button) findViewById(R.id.register); 
register.setOnClickListener(new View.OnClickListener() {   
    @Override 
    public void onClick(View v) { 

     register.setEnabled(false); 
     Intent register = new Intent(getApplicationContext(), register.class); 
     startActivity(register);    
    } 
}); 

Это работает хорошо, но я хочу Button оставаться unclickable, даже если приложение или телефон был перезапущен. Кто-нибудь знает, как сделать Button незаменимым, даже когда приложение было закрыто?

+5

Вы можете добавить логическое значение в SharedPreferences и проверить, если кнопка была нажата уже, каждый раз, когда вы создаете его. – Endzeit

+0

Ваша ошибка в том, что ** она делает кнопку постоянно незаметной **, но вы создаете новую кнопку каждый раз, когда приложение запускается! – tilpner

+1

@StackOverflowException Он уже это знает, но он спросил, как добиться того, что кнопка отключена. Поскольку вы не можете гарантировать, что действие не будет уничтожено, вам нужно сохранить состояние (кнопка уже нажата/или нет) и проверять его каждый раз, когда вы создаете кнопку. – Endzeit

ответ

0

Как я уже сказал в комментарии раздел что-то подобное может работать:

public class MyActivity extends Activity { 

    private static final String KEY_IS_BUTTON_CLICKABLE = "key_clickable"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     ... 

     final Button register = (Button) findViewById(R.id.register); 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     boolean isClickable = sharedPreferences.getBoolean(KEY_IS_BUTTON_CLICKABLE, true); 
     register.setEnabled(isClickable); 

     if(isClickable) { 
      register.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        register.setEnabled(false); 

        PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit() 
          .putBoolean(KEY_IS_BUTTON_CLICKABLE, false); 

        Intent register = new Intent(getApplicationContext(), register.class); 
        startActivity(register); 
       } 
      }); 
     } 
    } 
    ... 
} 
+0

Вы также можете упростить свой код. Если 'isClickable' является ложным (например, когда пользователь запускает приложение во второй раз, например), просто не вызывайте' setOnClickListener (...) '. Это гарантированный способ сделать «Button» незаметным. ;) – Squonk

+0

@Squonk О, конечно! Не думал об этом. Я изменю его. Танки для совета. ;) – Endzeit

+0

Работает ли какой-либо код? В таком случае, ведьма? – user3183005

0

В этом случае вы можете принять пессимистический подход и отключить кнопку в макете (по умолчанию) с помощью андроида: clickable = "false" и включить его в том состоянии, в котором требуется регистрация.

Смежные вопросы