4

私は Android を初めて使います (iOS のバックグラウンドを持つ) ので、次のことをしたいと思います: WebServices に接続するための資格情報をユーザーに要求する PreferenceFragment を作成しました。これらの資格情報がサーバーによって拒否されたことを検出した場合、ユーザーが設定 (資格情報) を編集できるダイアログ (モーダル) をユーザーに表示したいと考えています。

私は PreferenceActivity を使用してそれを行うことができました。したがって、ブートンをクリックすると、次のコードが実行されます。

Intent settingsActivity = new Intent(getActivity().getBaseContext(), PreferencesConnection.class);
startActivity(settingsActivity);

PreferenceActivity を XML リソースを含むダイアログとしてロードします。

addPreferencesFromResource(R.xml.preferences_connection);

しかし、これは減価償却されます。同じことができますが、フラグメントを使用しますか? PreferenceFragment を表示するために DialogFragment を使用する必要がありますか? DialogFragment で資格情報を再構築する方が簡単でしょうか? フラグメントの代わりにアクティビティを使用する必要がありますか?

4

1 に答える 1

1

PreferenceHeaders を使用せずに昔ながらの単一ページ設定画面を作成するには、次のようにします。

設定画面を呼び出すアクティビティで (例は onMenuItemSelected にあります):

case R.id.menuSettings:
        Intent settingsIntent = new Intent(this, SettingsActivity.class);
        startActivityForResult(settingsIntent, GC.SETTINGS_ACTIVITY_ID);
        break;

XML フォルダーに、昔ながらの PreferenceScreen を作成します。PreferenceCategory、ListPreference、CheckBoxPreference など。PreferenceHeaders は使用しないでください。

設定アクティビティを作成します。

package com.mycompany.project1;

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;

public class SettingsActivity extends PreferenceActivity {

    private final static String TAG = "SettingsAcitivity";

    public SettingsActivity() {}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyLog.d(TAG, "onCreate");
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new LocationFragment()).commit();
    }

    public static class LocationFragment extends PreferenceFragment {

        private String TAG = "LocationFragment";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MyLog.d(TAG, "onCreate");
            addPreferencesFromResource(R.xml.settings);
        }
    }
}

ダイアログ テーマを設定アクティビティに関連付けないでください。ラジオ ボタンなどの特定の設定タイプでは、奇妙な結果が得られます。(ダイアログを試してみましたが、コーディング エラーが見つかりませんでした。ダイアログ テーマの代わりに標準のアクティビティ テーマを使用すると、すべて正常に機能しました。明らかに、ホロ ダイアログ テーマが設定定義と衝突します。

注: startActivityforResult を使用して、変更された特定の設定値を再初期化できるようにしました。

于 2013-01-19T04:30:44.657 に答える