Android preferences onclick event

后端 未结 5 1509
轻奢々
轻奢々 2020-12-22 22:15

In my preferences.xml I have a preference element like this:


I want to assign onClick

5条回答
  •  感情败类
    2020-12-22 23:01

    You need to use onPreferenceTreeClick event.

    For example see http://www.javased.com/index.php?source_dir=platform_packages_apps_phone/src/com/android/phone/MobileNetworkSettings.java

     @Override 
        public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 
            /** TODO: Refactor and get rid of the if's using subclasses */ 
            if (mGsmUmtsOptions != null && 
                    mGsmUmtsOptions.preferenceTreeClick(preference) == true) { 
                return true; 
            } else if (mCdmaOptions != null && 
                       mCdmaOptions.preferenceTreeClick(preference) == true) { 
                if (Boolean.parseBoolean( 
                        SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) { 
    
                    mClickedPreference = preference; 
    
                    // In ECM mode launch ECM app dialog 
                    startActivityForResult( 
                        new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null), 
                        REQUEST_CODE_EXIT_ECM); 
                } 
                return true; 
            } else if (preference == mButtonPreferredNetworkMode) { 
                //displays the value taken from the Settings.System 
                int settingsNetworkMode = android.provider.Settings.Secure.getInt(mPhone.getContext(). 
                        getContentResolver(), android.provider.Settings.Secure.PREFERRED_NETWORK_MODE, 
                        preferredNetworkMode); 
                mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode)); 
                return true; 
            } else if (preference == mButtonDataRoam) { 
                if (DBG) log("onPreferenceTreeClick: preference == mButtonDataRoam."); 
    
                //normally called on the toggle click 
                if (mButtonDataRoam.isChecked()) { 
                    // First confirm with a warning dialog about charges 
                    mOkClicked = false; 
                    new AlertDialog.Builder(this).setMessage( 
                            getResources().getString(R.string.roaming_warning)) 
                            .setTitle(android.R.string.dialog_alert_title) 
                            .setIconAttribute(android.R.attr.alertDialogIcon) 
                            .setPositiveButton(android.R.string.yes, this) 
                            .setNegativeButton(android.R.string.no, this) 
                            .show() 
                            .setOnDismissListener(this); 
                } else { 
                    mPhone.setDataRoamingEnabled(false); 
                } 
                return true; 
            } else if (preference == mButtonDataEnabled) { 
                if (DBG) log("onPreferenceTreeClick: preference == mButtonDataEnabled."); 
                ConnectivityManager cm = 
                        (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    
                cm.setMobileDataEnabled(mButtonDataEnabled.isChecked()); 
                return true; 
            } else if (preference == mLteDataServicePref) { 
                String tmpl = android.provider.Settings.Secure.getString(getContentResolver(), 
                            android.provider.Settings.Secure.SETUP_PREPAID_DATA_SERVICE_URL); 
                if (!TextUtils.isEmpty(tmpl)) { 
                    TelephonyManager tm = (TelephonyManager) getSystemService( 
                            Context.TELEPHONY_SERVICE); 
                    String imsi = tm.getSubscriberId(); 
                    if (imsi == null) { 
                        imsi = ""; 
                    } 
                    final String url = TextUtils.isEmpty(tmpl) ? null 
                            : TextUtils.expandTemplate(tmpl, imsi).toString(); 
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
                    startActivity(intent); 
                } else { 
                    android.util.Log.e(LOG_TAG, "Missing SETUP_PREPAID_DATA_SERVICE_URL"); 
                } 
                return true; 
            } else { 
                // if the button is anything but the simple toggle preference, 
                // we'll need to disable all preferences to reject all click 
                // events until the sub-activity's UI comes up. 
                preferenceScreen.setEnabled(false); 
                // Let the intents be launched by the Preference manager 
                return false; 
            } 
        } 
    

提交回复
热议问题