我使用openActivity<MyPreferenceActivity>()
在Kotlin的Android Studio 3.1.2中创建一个Preference UI。
似乎代码A和代码B都可以正常运行。
android.intent.category.DEFAULT
和android.intent.category.PREFERENCE
之间有何不同?谢谢!
代码A
<activity android:name="ui.MyPreferenceActivity">
<intent-filter>
<action android:name="ui.MyPreferenceActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
代码B
<activity android:name="ui.MyPreferenceActivity">
<intent-filter>
<action android:name="ui.MyPreferenceActivity" />
<category android:name="android.intent.category.PREFERENCE" />
</intent-filter>
</activity>
两者
class MyPreferenceActivity : PreferenceActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
fragmentManager.beginTransaction().replace(android.R.id.content, MyPreferenceFragment()).commit()
}
class MyPreferenceFragment : PreferenceFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
addPreferencesFromResource(R.xml.aa)
}
}
}
答案 0 :(得分:2)
使用意图过滤器的目的是隐式意图。如果您的活动是由没有为其分配特定类别的隐式意图启动的,则其Intent过滤器应包括清单文件中提到的类别。
似乎代码A和代码B都可以正常运行。
这是正确的。即使将其定义为Manifest文件中的不同意图活动过滤器和类别,也可以通过活动“X”复制相同的代码和功能。就像我上面提到的,intent过滤器的目的是使用隐式intent。如果您在清单中将其定义为首选项类别意图,则在启动Preference类型的隐式意图时将调用活动X.
android.intent.category.DEFAULT和android.intent.category.PREFERENCE之间有什么不同
android.intent.category.DEFAULT
是隐式intent的默认类别(AS中没有任何特定角色),而当需要调用a的隐式intent时,将调用定义为android.intent.category.PREFERENCE
的活动偏好活动/片段/小组。