我有一个字符串列表(存储在数据库中,而不是作为资源)和
我想允许用户编辑此列表。这很容易做到正常
Activity
,但在此应用程序中,该列表应该是user preferences
的一部分。
基本上它是用户想要使用的句子列表。
由于我想提供一致的UI,我想将其添加到首选项屏幕:
<PreferenceScreen xmlns:android="...">
<!-- Some other categories and preferences here -->
<PreferenceScreen android:key="PREF_PDT"
android:title="Predefined Texts"
android:summary="View and edit the list of predefined texts">
</PreferenceScreen>
<!-- Some other categories and preferences here -->
<PreferenceScreen>
现在假设我有一个完全正常工作Activity
,允许我编辑数据库中的文本,我可以做什么,以便当用户点击'PREF_PDT'项时{{1使用了吗?
我认为我必须对Activity
进行一些修改或创建某种自定义偏好视图?
更新:所以,为了清楚起见,我不需要将“列表”屏幕挂钩到设置中,我只需要给用户一个他们仍然认为的印象在应用程序的首选项部分(当然没有打破导航堆栈)。否则,他们必须到一个地方编辑一些设置并转到另一个地方编辑文本。他们希望在“设置”下找到所有内容
更新:我已经从“自定义首选项”屏幕重命名问题以编辑项目列表,因为现在很清楚我正在尝试从PreferenceScreen启动活动。 sh404的答案有帮助,但我找不到正确的语法来引用我想要的活动。也许它是monodroid特有的。 (ActivityNotFoundException)
答案 0 :(得分:18)
这样写:
<Preference
android:key="mykey"
android:title="TheTitle"
android:summary="summary here" >
<intent android:action="net.hasnath.android.MyActivity"/>
</Preference>
如果您需要传递Intent Extras:
<Preference
android:key="mykey"
android:title="TheTitle"
android:summary="summary here" >
<intent android:action="net.hasnath.android.MyActivity">
<extra android:name="extra_name" android:value="my_value" />
<extra android:name="extra_2_name" android:value="my_value_2"/>
</intent>
</Preference>
接下来,您必须在AndroidManifest.xml中声明Activity 或者您可以在首选项屏幕中声明意图,如下所示:
<intent android:targetPackage="net.hasnath.android"
android:targetClass="net.hasnath.android.MyActivity"/>
这样您就不必对AndroidManifest进行任何更改。
答案 1 :(得分:0)
在清单文件中以这种方式设置活动
<activity android:name=".MainActivity">
<intent-filter>
<action android:name=".MainActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
并在首选项文件中
<Preference
android:key="preferred_key"
android:title="@string/preferred_title"
android:summary="@string/preferred_key_summary">
<intent android:action=".MainActivity"/
</Preference>
答案 2 :(得分:-1)
我遇到了同样的问题,但我在stackoverflow上搜索的解决方案都没有解决我的activity notfound Exception。
以下是我从here找到的工作解决方案:
<PreferenceScreen
android:title="@string/title_intent_preference"
android:summary="@string/summary_intent_preference">
<intent android:action="your.action.string"/>
</PreferenceScreen>
在manifest.xml
中的活动中设置一个intent过滤器 <activity ...>
<intent-filter>
<action android:name="your.action.string"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>