Есть ли способ поставить дополнительные цели из предпочтений?
Привет я запускаю активность с экрана настроек. Деятельность разделяется между тремя предпочтениями. Интересно, могу ли я установить дополнительные функции для этого действия в xml
<Preference
android:key="action_1"
android:title="@string/action_1_title"
>
<intent
android:action="com.package.SHAREDACTION"
>
</intent>
</Preference>
мне интересно, если я могу сделать что-то вроде
<extras>
<item
android:name=""
android:value=""/>
</extras>
все, что мне нужно сделать, чтобы передать целое число на самом деле. Я могу различные действия и проверить действие вместо дополнительных услуг.
8 ответов:
поскольку ваши дополнительные функции не являются константами, вы должны передать их в коде java вместо xml.
Intent intent = new Intent( this, YourTargetActivity.class ); intent.putExtra( EXTRAS_KEY, extras ); yourPref.setIntent( intent );
Я получил ответ, вы можете использовать его как это:
<Preference android:key="xxx" android:title="xxx" android:summary="xxx"> <intent android:action="xxx" > <extra android:name="xxx" android:value="xxx" /> </intent> </Preference>
добавить предпочтение к предпочтению.xml-файл:
<Preference android:title="user" android:key="user"/>
и затем вы можете использовать setOnPreferenceClickListener для запуска намерения с дополнительными функциями.
Preference userButton = (Preference) findPreference("user"); userButton.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { Intent intent = new Intent(getActivity(), YourTargetActivity.class); intent.putExtra(EXTRA, mUser); startActivity(intent); return true; } });
существует поле данных для намерений, описанных в документации здесь.
Он используется в демонстрационном приложении API для предпочтений XML для запуска намерения в Примере предпочтений Intent.
связанный пример xml из этой демонстрации в настройках.XML-код:
<PreferenceScreen android:title="@string/title_intent_preference" android:summary="@string/summary_intent_preference"> <intent android:action="android.intent.action.VIEW" android:data="http://www.android.com" /> </PreferenceScreen>
этот подход может работать для вас?
работает для меня.
<shortcut android:enabled="true" android:icon="@mipmap/xxx" android:shortcutDisabledMessage="@string/xxx" android:shortcutId="xxxx" android:shortcutLongLabel="xxx" android:shortcutShortLabel="xxx"> <intent android:action="android.intent.action.VIEW" android:targetClass="xxx" android:targetPackage="xxx"> <extra android:name="intent_name" android:value="true" /> </intent> </shortcut>
для отправки электронной почты или ставки на рынке вам нужно использовать что-то вроде
<Preference android:title="@string/title_intent_preference" android:summary="@string/summary_intent_preference"> <intent android:action="android.intent.action.VIEW" android:data="market://details?id=com.your_package" /> </Preference> <Preference android:title="@string/title_intent_preference" android:summary="@string/summary_intent_preference"> <intent android:action="android.intent.action.VIEW" android:data="mailto:your_email@gmail.com" /> </Preference>
можно использовать
<PreferenceScreen android:title="@string/title_intent_preference" android:summary="@string/summary_intent_preference"> <intent android:action="android.intent.action.VIEW" android:data="hello world" /> </PreferenceScreen>
для отправки данных о намерениях. Тогда в своей деятельности просто используйте:
getIntent().getDataString()
не совсем ответ на ваш вопрос, но очень связаны между собой. Может быть, кому-то это пригодится. Для более нового API (>11) у вас есть файл preference-headers, и вы можете определить пользовательские намерения для одного из заголовков. Я пытался добавить пользовательский дополнительный к одному из заголовков, и решение, которое я нашел, выглядит так:
в ваших предпочтениях-заголовки.XML-код:
<header android:fragment="com.mypackage.MyPreference$Prefs1Fragment" android:title="Intent" android:summary="Launches an Intent."> </header>
в вашем классе " MyPreference "(расширяет PreferenceActivity) у вас есть:
public static class Prefs1Fragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(getActivity(), MyTargetActivity.class); // set the desired extras, flags etc to the intent intent.putExtra("customExtra", "Something that I used to know"); // starting our target activity startActivity(intent); // ending the current activity, which is just a redirector to our end goal getActivity().finish(); } }