Android:如何从preference-header启动Activity?

时间:2015-11-22 14:18:40

标签: android android-fragments android-preferences preference-headers

我正在尝试从preference-header启动一个活动。

我搜索了很多解决方案,但除了这个问题外没有找到:Start activity from preference-headers.

但是在应用它的答案时,我得到了一个新的例外:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.package.myapp/com.package.myapp.MyActivity}; have you declared this activity in your AndroidManifest.xml?

这是我的代码:

<header
    android:icon="@drawable/ic_contacts"
    android:title="@string/menuOptionContact">
    <intent android:targetPackage="com.package.myapp"
        android:targetClass="com.package.myapp.MyActivity" />
</header>

我尝试将代码更改为多种形式,如下所示:             android:targetClass="MyActivity"

或者             android:targetClass=".MyActivity"

所有人都给了我同样的例外

我试图从相应的片段中启动它,如下所示:

<header
    android:fragment="com.package.myapp.SettingsActivity$ContactPreferenceFragment"
    android:icon="@drawable/ic_contacts"
    android:title="@string/menuOptionContact">
</header>

并在我的片段中创建了我:

  startActivity(new Intent(getActivity(), MyActivity.class));

它会启动活动但是当我从MyActivity中点回时它会将我带到一个空白片段然后我必须再次点击以返回到SettingsActivity

如何直接从preference-header启动MyActivity或删除后面的空白片段?

修改

我的AndroidManifest.xml

   <activity
        android:name=".MyActivity"
        android:label="@string/app_name">
    </activity>

任何帮助都将非常感激

1 个答案:

答案 0 :(得分:1)

已经很长时间了但是如果有人还在努力解决这个问题,我就这样解决了 在您的首选项头文件中添加此

<header
android:title="@string/menuOptionContact">
    <intent android:action="your custom string"
      android:targetClass="com.package.myapp.MyActivity"/>
</header>
清单文件中的

包括以下内容:

<activity android:name=".activity.MyActivity" 
              android:label="@string/my_activity_title"
              android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter>
           <action android:name="your custom string" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
    </activity>

在我的情况下,当我将targetPackage与targetClass一起包含时系统最终将两者连接在一起时会导致错误 根据android开发人员指南,targetClass和targetPackage都是intent.setComponent方法的同义词。