2017-06-09 74 views
1

我有一个Android应用程序PreferenceActivity,其中一个偏好项启动我自己的活动之一(“关于”屏幕)。入口看起来是这样的:跳转到Android偏好活动活动

<PreferenceScreen android:title="@string/about.Title"> 
    <intent ... /> 
</PreferenceScreen> 

同时,(这很重要),我使用的摇篮,并为我调试.debug应用程序ID后缀的基础之上。我在手机上安装了Play商店版本和调试版本。

问题是:以上使用什么样的意图?我知道有两种选择,无论其工作:

  1. 使用的android:action意图用我自己的操作字符串,并注册在我的清单的行动字符串<intent-filter>
    1. 如果我在清单中使用android:exported="false",则安装这两个应用程序时,该活动无法在Android 7.1上加载。 (我得到了“完成操作使用...没有应用程序可以执行此操作”。)如果只安装了一个(任一个),它就可以正常工作。
    2. 如果我使用android:exported="true",那么我不仅可以导出一个内部活动,但是当我点击首选项时,两个活动的实例被压入堆栈(每个应用一个)。如果我只安装两个应用程序中的一个,则只显示一个实例。
  2. 使用android:targetPackageandroid:androidClass的做法,但我不知道用了什么包,因为它是释放和调试版本不同(因为后缀)。一种解决方案是在调试资源文件夹中有一个preferences.xml文件的副本,只更改了软件包,但这很容易出错。

我多年来一直在使用选项#1.1,但最近它在我的手机上坏掉了,我怀疑7.1更新是怪罪。我以前从来没有在这两个安装的应用程序之间发生串扰!

这必须是一个很常见的模式!有任何想法吗?

回答

1

请按照此步骤:

后您使用

addPreferencesFromResource(R.xml.preferences); 

发现你要设置的onClick和铸像

Preference pref = (Preference) findPreference("pref"); 

然后你就可以将其定义自己的喜好添加的喜好轻松设置onClick使用:

pref.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
    @Override 
    public boolean onPreferenceClick(Preference preference) { 
     startActivity(new Intent(CurrentActivity.this, NextActivity.class)); 
     return true; 
    } 
});