TabActivity与ActivityGroup和PreferenceActivity子项

时间:2011-10-10 17:06:45

标签: android tabactivity preferenceactivity activitygroup

我有一个TabActivity,每个标签都有ActivityGroup。 在第一组的主ActivityChild上,我有一个菜单选项,它为用户提供了打开首选项的选项。 当我单击菜单上的“首选项”时,我在ActivityGroup中启动PreferenceActivity,它在第一个选项卡上显示PreferenceActivity。 问题是当我点击任何必须显示Dialog(针对EditTextPreference)的特定首选项时。 我有以下例外:

android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@405d3a20

我明白问题是因为PreferenceActivity显示的Dialog使用了错误的上下文,但我现在不知道如何更改创建的对话框的上下文。

Belows是我创建的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);

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

This is very common problem with dialog's in Tab Host.

Actually the Activity context is not sufficient to show a Dialog in Tab.


You have to use the context of your GroupActivity for the dialog to be enabled without exception

答案 1 :(得分:0)

我用错误的解决方案解决了这个问题,here 不幸的是,我唯一的方式。