我想在用户点击我的应用设置中的以下项目时显示活动:
<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 }
有什么问题?
答案 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>
希望这也有助于其他人。