¿Hay alguna manera de poner extras para Intención de las preferencias?
-
21-09-2019 - |
Pregunta
Hola estoy lanzando la actividad de la pantalla de preferencias. La actividad se comparte entre tres preferencias. Me pregunto si puedo establecer extras para esta actividad en XML
<Preference
android:key="action_1"
android:title="@string/action_1_title"
>
<intent
android:action="com.package.SHAREDACTION"
>
</intent>
</Preference>
Me pregunto si puedo hacer algo como
<extras>
<item
android:name=""
android:value=""/>
</extras>
Todo lo que necesito hacer para pasar un entero de verdad. Puedo diferentes acciones y medidas de verificación en lugar de extras.
Solución
A medida que los extras no son constantes, debe pasar en el código java en lugar de XML.
Intent intent = new Intent( this, YourTargetActivity.class );
intent.putExtra( EXTRAS_KEY, extras );
yourPref.setIntent( intent );
Otros consejos
Tengo una respuesta, se puede utilizar de esta manera:
<Preference
android:key="xxx"
android:title="xxx"
android:summary="xxx">
<intent android:action="xxx" >
<extra android:name="xxx" android:value="xxx" />
</intent>
</Preference>
Añadir a la preferencia del archivo preference.xml:
<Preference android:title="user" android:key="user"/>
Y a continuación, se puede utilizar un setOnPreferenceClickListener para lanzar una Intención con extras.
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;
}
});
Hay un campo de datos para los intentos descritos en la documentación aquí .
Se utiliza en la aplicación de demostración API para las preferencias XML para poner en marcha un intento en el ejemplo Preferencias Intención.
ejemplo relacionadas con XML de esa demostración en preferences.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>
Tal vez este enfoque podría funcionar para usted?
trabajando para mí.
<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>
Para enviar correo electrónico o tasa en el mercado es necesario utilizar algo así como
<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>
Puede utilizar
<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>
para enviar los datos de intención. Luego, en su actividad sólo tiene que utilizar:
getIntent().getDataString()
En realidad, no una respuesta a su pregunta, pero muy relacionados. Tal vez alguien le resultará útil. Para más nueva API (> 11) que tiene un archivo de preferencias cabeceras y puede definir las intenciones personalizados para una de las cabeceras. Yo estaba tratando de añadir un extra a medida para uno de los encabezados y la solución que encontré es la siguiente:
En su preferencia-headers.xml:
<header
android:fragment="com.mypackage.MyPreference$Prefs1Fragment"
android:title="Intent"
android:summary="Launches an Intent.">
</header>
En la clase "MyPreference" (se extiende PreferenceActivity) tiene:
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();
}
}