通过单击“首选项”显示活动

时间:2014-07-31 22:23:24

标签: android android-intent android-activity android-preferences

我想在用户点击我的应用设置中的以下项目时显示活动:

<Preference android:title="@string/prefs_about_app" >
    <intent android:action="com.example.myapp.action.SHOW_ABOUT_DIALOG"/>
</Preference>

这是活动本身:

public class ShowAboutAppActivity extends Activity {

    public static final String SHOW_ABOUT_DIALOG =
            "com.example.myapp.action.SHOW_ABOUT_DIALOG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String action = getIntent().getAction();

        if(action != null && !action.isEmpty() && action.equalsIgnoreCase(SHOW_ABOUT_DIALOG)) {

            //Building an AlertDialog to show about app dialog

        } else {
            finish();
        }
    }
}

以下是我在清单中定义活动的方式:

    <activity
        android:name=".settings.ShowAboutAppActivity"
        android:label="@string/title_activity_show_about_app" >
        <intent-filter>
            <action android:name="com.example.myapp.action.SHOW_ABOUT_DIALOG"/>
        </intent-filter>
    </activity>

但是当我点击首选项屏幕中的项目时出现此错误:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.example.myapp.action.SHOW_ABOUT_DIALOG }

有什么问题?

2 个答案:

答案 0 :(得分:1)

您所要做的就是在首选项活动或片段中检索首选项,然后覆盖单击它时发生的情况。首选项片段和活动有一个名为onPreferenceTreeClick的方法。因此,只需在xml中为您的首选项设置一个键,并在代码中引用它。像这样......

preference.xml

<Preference
   android:key="myKey"
   android:title="CustomIntentPref"
   //...other stuff />


@Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
            Preference preference) {

     if(preference.getKey().equalsIgnoreCase("myKey") {
         Intent myIntent = new Intent(PreferenceActivity.this, MyActivity.class);
         startActivity(myIntent);
     } 


}
希望有所帮助!

答案 1 :(得分:0)

好的解决方案如下:

我从活动中移除了检查操作,然后我将清单中的intent过滤器更改为:

<activity
    android:name=".settings.ShowAboutAppActivity"
    android:label="@string/title_activity_show_about_app" >
    <intent-filter>
        <action android:name="com.example.myapp.action.SHOW_ABOUT_DIALOG"/>
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

然后在首选项xml:

<Preference android:title="@string/prefs_about_app" >
    <intent android:action="com.example.myapp.action.SHOW_ABOUT_DIALOG"/>
</Preference>

希望这也有助于其他人。