您好我正在从偏好设置屏幕启动活动。活动在三个偏好中共享。 我想知道我是否可以在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>
我需要做的就是真正传递一个整数。我可以采取不同的行动并检查行动,而不是额外的行动。
答案 0 :(得分:109)
我得到了答案,你可以像这样使用它:
<Preference
android:key="xxx"
android:title="xxx"
android:summary="xxx">
<intent android:action="xxx" >
<extra android:name="xxx" android:value="xxx" />
</intent>
</Preference>
答案 1 :(得分:13)
文档here中描述的意图有一个数据字段。
它在API演示应用程序中用于XML首选项以在Intent Preferences示例中启动intent。
来自preferences.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>
也许这种方法适合你?
答案 2 :(得分:13)
将首选项添加到preference.xml文件:
<Preference android:title="user" android:key="user"/>
然后你可以使用setOnPreferenceClickListener来发布带有额外内容的Intent。
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;
}
});
答案 3 :(得分:10)
为我工作。
<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>
答案 4 :(得分:8)
由于你的额外内容不是常量,你应该用java代码而不是xml传递它们。
Intent intent = new Intent( this, YourTargetActivity.class );
intent.putExtra( EXTRAS_KEY, extras );
yourPref.setIntent( intent );
答案 5 :(得分:1)
要在市场上发送电子邮件或费率,您需要使用类似
的内容<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>
答案 6 :(得分:1)
您可以使用
<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()
答案 7 :(得分:0)
不是你的问题的答案,但非常相关。也许有人会发现它很有用。 对于较新的API(&gt; 11),您有一个preference-headers文件,您可以为其中一个标头定义自定义意图。我试图在其中一个标题中添加一个自定义Extra,我找到的解决方案是这样的:
在您的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();
}
}