Is there any way to put extras to Intent from preferences?

后端 未结 8 680
广开言路
广开言路 2020-12-13 08:42

Hi i\'m launching activity from preferences screen. Activity is shared among three preferences. I wonder if i can set extras for this activity in xml



        
相关标签:
8条回答
  • 2020-12-13 08:52

    As your extras are not constants, you should pass them in the java code instead of xml.

    Intent intent = new Intent( this, YourTargetActivity.class );
    intent.putExtra( EXTRAS_KEY, extras );
    yourPref.setIntent( intent );
    
    0 讨论(0)
  • 2020-12-13 08:54

    Add the preference to the preference.xml file:

    <Preference android:title="user" android:key="user"/>            
    

    And then you can use a setOnPreferenceClickListener to launch an Intent with 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;
        }
    });
    
    0 讨论(0)
  • 2020-12-13 08:56

    I got an answer, you can use it like this:

    <Preference
        android:key="xxx"
        android:title="xxx"
        android:summary="xxx">
       <intent android:action="xxx" >
             <extra android:name="xxx" android:value="xxx" />
        </intent>        
    
    </Preference>
    
    0 讨论(0)
  • 2020-12-13 09:05

    working for me.

    <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>
    
    0 讨论(0)
  • 2020-12-13 09:06

    You can use

    <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>
    

    to send the intent data. Then in your activity simply use:

    getIntent().getDataString()
    
    0 讨论(0)
  • 2020-12-13 09:06

    Not really an answer to your question, but very much related. Maybe someone will find it useful. For newer API (>11) you have a preference-headers file and you can define custom intents for one of the headers. I was trying to add a custom Extra to one of the headers and the solution I found goes like this:

    In your preference-headers.xml:

    <header 
            android:fragment="com.mypackage.MyPreference$Prefs1Fragment"
            android:title="Intent"
            android:summary="Launches an Intent.">
    </header>
    

    In your "MyPreference" class (extends PreferenceActivity) you have:

    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();
        }
    }
    
    0 讨论(0)
提交回复
热议问题