各タブにActivityGroupがあるTabActivityがあります。最初のグループのホーム ActivityChild には、ユーザーに設定を開くオプションを提供するメニュー オプションがあります。メニューの [Preferences] をクリックすると、ActivityGroup 内で PreferenceActivity が開始され、最初のタブに PreferenceActivity が表示されます。問題は、ダイアログを表示する必要がある特定の設定をクリックしたときです(EditTextPreference用)。次の例外があります。
android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@405d3a20
問題は、PreferenceActivity によって表示されるダイアログが間違ったコンテキストを使用しているためであることは理解していますが、作成されたダイアログのコンテキストをどのように変更するかはわかりません。
以下は、私が作成した PreferenceActivity です。
public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.preferences);
addPreferencesFromResource(R.xml.preferences);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
prefs.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
}
}
カスタム ダイアログを作成したくありません。そのために PreferenceActivity の仕組みを利用したいと考えています。以下は、グループに追加するために使用しているコードです。
i = new Intent(MyActivity.this, PreferencesActivity.class);
TabGroupActivity parentActivity = (TabGroupActivity) getParent();
parentActivity.startChildActivity("PreferencesActivity", i);
何か案は?