優先度ヘッドからアクティビティを開始します
-
26-10-2019 - |
質問
N-Layer PreferenceActivitiesの実装第1層優先反応性は、優先ヘッダーからロードされています。
最初のヘッダーは、設定の断片を作成します。 2番目はブラウザアクティビティ(2番目はDeveloper.Android.comの例です)は、指定されたURLを開きます。 3番目のものは、優先順位ヘッダーからもロードされる次のレベルの優先性性能になりたいです。
最初の2つは正常に動作しますが、3番目は例外を除いてアプリをクラッシュさせています。
"Android.Content.ActivityNotFoundException:意図を処理するアクティビティ{act = android.intent.action.view dat = com.myppany.myapp.ui.mypreferencecivity}"
マニフェストファイルで宣言されたmypreferenceactivity。おそらくmain_headers.xmlでのアクティビティの宣言は間違っていますが、私はそれを正しい方法で参照するものではありませんでした。いくつかのバリエーションを試してみましたが、うまくいきませんでした。
私が使用した例: http://developer.android.com/reference/android/preference/preferenceactivity.html
なぜそれが私にとってうまくいかないのか、または次の優先反応性をどのように呼び出すことができるかという考えはありますか?基本的に、ヘッダーからアクティビティを開始する必要があります。それは本当に簡単なはずですが、何かが足りません。
public class MySettings extends PreferenceActivity
{
@Override
public void onBuildHeaders(List<Header> target)
{
loadHeadersFromResource(R.xml.main_headers, target);
}
}
main_headers.xml:
<?xml version="1.0" encoding="utf-8"?>
<preference-headers
xmlns:android="http://schemas.android.com/apk/res/android" >
<header android:title="Custom Settings"
android:fragment="com.mycompany.myapp.ui.SettingsFragment" />
<header android:title="Intent"
android:summary="Launches an Intent.">
<intent android:action="android.intent.action.VIEW"
android:data="http://www.android.com" />
</header>
<header android:title="Another Preference Activity">
<intent android:action="android.intent.action.VIEW"
android:data="com.mycompany.myapp.ui.MyPreferenceActivity" />
</header>
</preference-headers>
解決
3番目の好みから明示的なアクティビティを開始したい場合は、これを行います。
<intent android:targetPackage="com.mycompany.myapp"
android:targetClass="com.mycompany.myapp.ui.MyPreferenceActivity" />
他のヒント
<header android:title="Intent"
android:summary="Launches an Intent.">
<intent android:targetPackage="com.mycompany.myapp"
android:targetClass="com.mycompany.myapp.ui.MyPreferenceActivity" /></header>
MainFestファイルに以下のコードを追加します
<activity android:name=".activities.MyActivity"
android:label="@string/my_activity_title"
android:theme="@android:style/Theme.Black.NoTitleBar">
<intent-filter>
<action android:name="com.example.myapp.activities.MyActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Javaを使用して設定を作成している場合、同じ結果を達成できます。
PreferenceScreen editPhoneNumbersScreen = getPreferenceManager().createPreferenceScreen(mContext);
editPhoneNumbersScreen.setTitle(getResources().getString(R.string.change_add_emergency_numbers));
editPhoneNumbersScreen.setSummary(getResources().getString(R.string.summary_add_no));
Intent i = new Intent(getApplicationContext(),TargetActivity.class);
i.putExtra("change numbers", true);
editPhoneNumbersScreen.setIntent(i);