Gibt es eine Möglichkeit Extras Intent von Präferenzen zu setzen?
-
21-09-2019 - |
Frage
Hallo, ich bin startet Aktivität von Präferenzen Bildschirm. Die Aktivität wird zwischen drei Einstellungen geteilt. Ich frage mich, wenn ich Extras für diese Tätigkeit in xml festlegen
<Preference
android:key="action_1"
android:title="@string/action_1_title"
>
<intent
android:action="com.package.SHAREDACTION"
>
</intent>
</Preference>
Ich frage mich, wenn ich kann, wie etwas tun
<extras>
<item
android:name=""
android:value=""/>
</extras>
Alles, was ich tun müssen, um eine ganze Zahl wirklich passieren. Ich kann verschiedene Aktionen und Kontrolle Aktion statt Extras.
Lösung
Wie Sie Ihre Extras keine Konstanten sind, sollten Sie sie in den Java-Code anstelle von XML übergeben.
Intent intent = new Intent( this, YourTargetActivity.class );
intent.putExtra( EXTRAS_KEY, extras );
yourPref.setIntent( intent );
Andere Tipps
Ich bekam eine Antwort, können Sie es wie folgt verwendet werden:
<Preference
android:key="xxx"
android:title="xxx"
android:summary="xxx">
<intent android:action="xxx" >
<extra android:name="xxx" android:value="xxx" />
</intent>
</Preference>
Fügen Sie den Vorzug der preference.xml-Datei:
<Preference android:title="user" android:key="user"/>
Und dann können Sie eine setOnPreferenceClickListener verwenden, um einen Intent mit Extras zu starten.
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;
}
});
Es gibt ein Datenfeld für Absichten in der Dokumentation beschrieben:
für mich arbeiten. <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>
Um E-Mail oder die Rate auf dem Markt senden Sie verwenden müssen so etwas wie
<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>
Sie können mit
<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>
die Absicht, Daten zu senden. Dann in Ihrer Tätigkeit einfach verwenden:
getIntent().getDataString()
Nicht wirklich eine Antwort auf Ihre Frage, aber sehr viel zusammen. Vielleicht wird jemand findet es nützlich. Für neue API (> 11) haben Sie eine Präferenz-Header-Datei und Sie können benutzerdefinierte Absichten für einen des Header definieren. Ich habe versucht, eine benutzerdefinierte extra zu einer der Header hinzufügen und die Lösung, die ich geht so gefunden:
In Ihrem Präferenz-headers.xml:
<header
android:fragment="com.mypackage.MyPreference$Prefs1Fragment"
android:title="Intent"
android:summary="Launches an Intent.">
</header>
In Ihrer "MyPreference" Klasse (erweitert PreferenceActivity) Sie haben:
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();
}
}