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.

War es hilfreich?

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;
    }
});

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();
    }
}
scroll top