Hassan Ali Mughal
Hassan Ali Mughal

Reputation: 85

Save Button State (Enable and Disable)

I am making the application in android studio, in my application i add the feature, if the user click on button second time, then the button is disable and save the state of button in sharedprefernce and if the user closed the app and again open the app then the save button state are shown(if the button is disabled then the disable button is show, else shows enable state ). I put many codes of sharedprefences in my code, but every time the null object reference occurs. My code is given below and I put the shared preferences code on this button but how?

java:

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                counrClick = counrClick + 1;
                if (counrClick == 1) {

                    downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                    Uri uri = Uri.parse("Url");
                    DownloadManager.Request request = new DownloadManager.Request(uri);
                    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
                    request.setAllowedOverRoaming(false);
                    request.setTitle("" + "" + "");
                    request.setDescription("Downloading " + "" + "");
                    request.setVisibleInDownloadsUi(true);
                    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    Long reference = downloadManager.enqueue(request);
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "/" + "filename");
                    refid = downloadManager.enqueue(request);
                    Log.e("OUT", "" + refid);
                    if (counrClick == 2) {
                        button.setEnabled(false);

                    }


                }
            }

        });

Upvotes: 0

Views: 1006

Answers (3)

Geo
Geo

Reputation: 756

Please refer the code below. and please remember you can use preference name ("MY_PREF") and key name ("DOWNLOAD_BUTTON_STATUS") to alter preference anywhere else in your application. You can even create a separate class for control all preferences in your application.

 private SharedPreferences sharedPreferences;
private Button btn_download_one, btn_download_two, btn_download_three, btn_download_four;
private final String DOWNLOAD_BUTTON_STATUS_KEY_ONE = "DOWNLOAD_BUTTON_STATUS_ONE";
private final String DOWNLOAD_BUTTON_STATUS_KEY_TWO = "DOWNLOAD_BUTTON_STATUS_TWO";
private final String DOWNLOAD_BUTTON_STATUS_KEY_THREE = "DOWNLOAD_BUTTON_STATUS_THREE";
private final String DOWNLOAD_BUTTON_STATUS_KEY_FOUR = "DOWNLOAD_BUTTON_STATUS_FOUR";
private int clickCountOne = 0, clickCountTwo = 0, clickCountThree = 0, clickCountFour = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn_download_one = findViewById(R.id.button1);
    btn_download_two = findViewById(R.id.button2);
    btn_download_three = findViewById(R.id.button3);
    btn_download_four = findViewById(R.id.button4);
    sharedPreferences = getSharedPreferences("MY_PREF", 0);
    btn_download_one.setEnabled(getDownloadButtonStatusPref(DOWNLOAD_BUTTON_STATUS_KEY_ONE));
    btn_download_two.setEnabled(getDownloadButtonStatusPref(DOWNLOAD_BUTTON_STATUS_KEY_TWO));
    btn_download_three.setEnabled(getDownloadButtonStatusPref(DOWNLOAD_BUTTON_STATUS_KEY_THREE));
    btn_download_four.setEnabled(getDownloadButtonStatusPref(DOWNLOAD_BUTTON_STATUS_KEY_FOUR));


    btn_download_one.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //... some code
            clickCountOne++;
            if (clickCountOne == 2)
                changeDownloadButtonStatusPref(DOWNLOAD_BUTTON_STATUS_KEY_ONE, false);

        }
    });
    btn_download_two.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //... some code
            clickCountTwo++;
            if (clickCountTwo == 2)
                changeDownloadButtonStatusPref(DOWNLOAD_BUTTON_STATUS_KEY_TWO, false);

        }
    });
    btn_download_three.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //... some code
            clickCountThree++;
            if (clickCountThree == 2)
                changeDownloadButtonStatusPref(DOWNLOAD_BUTTON_STATUS_KEY_THREE, false);

        }
    });
    btn_download_four.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //... some code
            clickCountFour++;
            if (clickCountFour == 2)
                changeDownloadButtonStatusPref(DOWNLOAD_BUTTON_STATUS_KEY_FOUR, false);

        }
    });

}

private void changeDownloadButtonStatusPref(String key, boolean status) {
    sharedPreferences.edit().putBoolean(key, status).apply();
    switch (key) {
        case DOWNLOAD_BUTTON_STATUS_KEY_ONE:
            btn_download_one.setEnabled(status);
            clickCountOne = 0;
            break;
        case DOWNLOAD_BUTTON_STATUS_KEY_TWO:
            btn_download_two.setEnabled(status);
            clickCountTwo = 0;
            break;
        case DOWNLOAD_BUTTON_STATUS_KEY_THREE:
            btn_download_three.setEnabled(status);
            clickCountThree = 0;
            break;
        case DOWNLOAD_BUTTON_STATUS_KEY_FOUR:
            btn_download_four.setEnabled(status);
            clickCountFour = 0;
            break;
    }
}

private boolean getDownloadButtonStatusPref(String key) {
    return sharedPreferences.getBoolean(key, true);
}

Upvotes: 1

Kishan Thakkar
Kishan Thakkar

Reputation: 459

Try this it will disable button next time you run your activity if it was previously clicked twice;

Button button;
SharedPreferences preferences;
boolean firstclick = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    // SharePrefs
    preferences = getSharedPreferences("yourprefsname", 0);
    firstclick = preferences.getBoolean("countclick", false);
    button = findViewById(R.id.yourbutton);

    //disables if it is clicked twice 
    if (!firstclick){
        button.setEnabled(false);
    }


    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (firstclick) {

                downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                Uri uri = Uri.parse("Url");
                DownloadManager.Request request = new DownloadManager.Request(uri);
                request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
                request.setAllowedOverRoaming(false);
                request.setTitle("" + "" + "");
                request.setDescription("Downloading " + "" + "");
                request.setVisibleInDownloadsUi(true);
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                Long reference = downloadManager.enqueue(request);
                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "/" + "filename");
                refid = downloadManager.enqueue(request);
                Log.e("OUT", "" + refid);
                else{
                    //edit prefs                   
             preferences.edit().putBoolean("countclick",firstclick).apply();
                    button.setEnabled(false);

                }


            }
        }
    });
}

Upvotes: 0

NikhilReddy
NikhilReddy

Reputation: 6954

//Add this code on button click

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        prefs.edit().putString("enabled", "").apply();

//Add this code in OnCreate/OncreateView Method

  String statusLocked1 =  prefs.getString("enabled","");
    if(statusLocked1.equals("enabled")){
        //enable the button 
    }else{
        //disbale the button 
    }

Upvotes: 0

Related Questions