これまでのところ、多くのスタックオーバーフローの提案を確認して試すなど、Android の設定と戦っておそらく 6 時間記録しました。私の最近の問題は、設定アクティビティから行った変更がメインのアクティビティに引き継がれないことです。コードを抽出しました。
主な活動:
public class MainActivity extends Activity {
/*...*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*...*/
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
super.onOptionsItemSelected(item);
switch(item.getItemId())
{
case R.id.menu_settings:
startActivity(new Intent(this, PrefsActivity.class));
return true;
}
return false;
}
@Override
public void onStart()
{
super.onStart();
SharedPreferences prefs = getSharedPreferences("app_prefs", MODE_PRIVATE);
int somePrefValue = prefs.getInt("somePrefKey", 1);
/*...*/
}
}
設定アクティビティ:
public class PrefsActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.app_prefs);
}
}
設定リソース:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Some Category">
<EditTextPreference
android:key="somePrefKey"
android:title="Some Preference"
android:defaultValue="1"
android:numeric="integer" />
</PreferenceCategory>
</PreferenceScreen>
問題が発生した場合、エミュレータと Nexus 7 の両方で 4.1 でこの問題が発生しています。
<VENT>
記録のために、これまでに私が戦った(そして勝った)好みで戦った戦いを以下に示します。
- XML 設定ファイルが Eclipse ツリー内のどこに置かれ、何と呼ばれるか。
- 設定アクティビティで値を整数または浮動小数点数に制限する方法。
- XML で設定値を整数または浮動小数点として指定しても、設定が整数または浮動小数点数になるわけではなく、文字列のままです。
- 共有設定ファイルの名前を取得するいくつかのメソッドにもかかわらず、実際にファイルをロードする唯一のメソッドは addPreferencesFromResource() であり、PreferenceActivity からのみです。XML を解析しない限り、XML と最初の prefs ゲッターでデフォルトを重複してコーディングする必要があります。
設定に関する Android の公式ドキュメントを読んだり、3 冊の本で設定の使用に関する章を読んだりしたにもかかわらず、私はこれらの問題を抱えていました。Android のドキュメントは概してかなり優れていますが、私の (継続的な) トラブルと、これに関する膨大な数のスタックオーバーフローの質問を考慮すると、この部分には多少の作業が必要だと思います。</VENT>
私の最近の問題についてご協力いただきありがとうございます。
PS 非フラグメント アプローチが非推奨になったことは認識していますが、私は Android を初めて使用し、Nexus 7 タブレット以外で実行する必要のないプロトタイプを作成する期限が迫っています。シンプルにしたいのですが、今は時間を節約していないように見えます.