Yanıtlar:
Badr,
android:key
Öğe için ayarlamanız gerekiyor , Sonra kodunuzda yapabilirsiniz ...
XML'nizde aşağıdakileri kullandığınızı varsayarsak:
<Preference android:title="About" android:key="myKey"></Preference>
Ardından kodunuzda aşağıdakileri yapabilirsiniz:
Preference myPref = (Preference) findPreference("myKey");
myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
//open browser or intent here
return true;
}
});
findPreference
kullanımdan kaldırıldı.
PreferenceActivity.findPreference
kullanımdan kaldırıldı. Ancak dokümantasyon "[T] işlevselliğinin artık yeni PreferenceFragment sınıfında bulunması gerektiğini söylüyor. PreferenceActivity'yi eski modunda kullanıyorsanız, buradaki dokümantasyon buradaki kullanımdan kaldırılan API'ler için geçerlidir." Ve PreferenceFragment.findPreference
kullanımdan kaldırılmamıştır (API itibariyle) seviye 23, yazım sırasında güncel). Yani, findPreference
kendisi kullanımdan kaldırılmış değil; doğrudan kullanımı kullanımdan PreferenceActivity
kaldırılmıştır. Google PreferenceFragment
terk etmemizi değil, onun yerine taşınmamızı istiyor findPreference
.
onPreferenceClick
, true
tıklama başka şekilde işlendiyse geri dönün false
.
bir web sitesi başlatmak için:
<PreferenceScreen android:title="website">
<intent
android:action="android.intent.action.VIEW"
android:data="http://www.example.com"
/>
</PreferenceScreen>
belirli bir etkinliği başlatmak için:
<PreferenceScreen android:title="something">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.example.foo"
android:targetClass="com.example.foo.SomeActivity"
/>
</PreferenceScreen>
mime tipini ayarlamak için "android: mimetype" seçeneğini de kullanabilirsiniz .
intent-filter
için bildirimde herhangi birini belirtmeli miyim SomeActivity
, çünkü şunu alıyorum ActivityNotFoundException
:(
OnPreferenceTreeClick olayını kullanmanız gerekir.
Örneğin, http://www.javased.com/index.php?source_dir=platform_packages_apps_phone/src/com/android/phone/MobileNetworkSettings.java adresine bakın
@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;
}
}
2018+ GÜNCELLEME
Bugün, findPreference
yöntem kullanımdan kaldırılmıştır. Bu nedenle, bunu başarmak onPreferenceTreeClick
için Tercih bölümünüzdeki yöntemi geçersiz kılmanız yeterlidir. Örneğin:
public class MySettingsFragment extends PreferenceFragment {
@Override
public boolean onPreferenceTreeClick (PreferenceScreen preferenceScreen,
Preference preference)
{
String key = preference.getKey();
if(key.equals("someKey")){
// do your work
return true;
}
return false;
}
}
Ayrıca, belirli bir tercih öğesinin (ör. ListPreference
) İçindeki bir tıklamayı işlemeniz gerekiyorsa setOnPreferenceChangeListener
, onCreate
yönteminin içini kaydetmelisiniz MySettingsFragment
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
// register listener
final Preference prefList = findPreference("key");
prefList.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object value) {
System.out.println("Selected: " + value);
return true;
}
});
}
onPreferenceClick
ve onPreferenceTreeClick
?
@Jason Gilbert'ın cevabının devamı
Hattayım targetSdkVersion 25 ve onun cevabı ben Tercih etiketiyle niyet etiketi sarmak zorunda çalışmadı. Misal:
<PreferenceScreen android:title="something">
<Preference title="Title">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.example.foo"
android:targetClass="com.example.foo.SomeActivity"
/>
</Preference>
</PreferenceScreen>
onPostCreate
alışkanlık işin çok erken (Nullpointer-İstisna) olduğu için. Herhangi bir yardım için minnettarız