我有一个带有PreferenceActivity
的Android应用,其中一个偏好条目会启动我自己的一个活动("关于"屏幕)。条目如下所示:
<PreferenceScreen android:title="@string/about.Title">
<intent ... />
</PreferenceScreen>
另外(这很重要),我使用Gradle和.debug
应用程序ID后缀作为我的调试版本。我在手机上安装了Play商店版和调试版。
问题是:上面使用什么样的意图?我知道有两种选择,两种选择都不起作用:
android:action
意图,并在我的清单中使用<intent-filter>
注册该操作字符串。
android:exported="false"
,则在安装两个应用时,Android 7.1上的活动无法加载。 (我得到&#34;完成动作使用......没有应用程序可以执行此操作&#34;。)如果只安装了一个(或者),它可以正常工作。android:exported="true"
,那么我不仅要导出内部活动,而且当我点击首选项时,活动的两个实例将被推送到堆栈中(每个实例一个)应用程序)。如果我只安装两个应用程序中的一个,则只显示一个实例。android:targetPackage
和android:androidClass
方法,但后来我不知道该怎么用于包,因为它与发布和调试版本不同(因为后缀)。一种解决方案是在调试资源文件夹中拥有preferences.xml
文件的副本,只更改了包,但这很容易出错。我多年来一直在使用#1.1选项,但它最近在我的手机上出现故障,我怀疑7.1更新应该受到指责。我之前从未在这两个已安装的应用程序之间进行过交谈!
这必须是一种非常常见的模式!有什么想法吗?
答案 0 :(得分:1)
请按照以下步骤操作:
使用
添加首选项后addPreferencesFromResource(R.xml.preferences);
找到您想要设置onClick的首选项,并通过像
这样的转换来定义它Preference pref = (Preference) findPreference("pref");
然后您可以使用:
轻松设置其onClickpref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
startActivity(new Intent(CurrentActivity.this, NextActivity.class));
return true;
}
});