2011-02-02 10 views
3

ネストされたタブアクティビティがあります。ネストされたタブアクティビティ内にProgressDialogが表示される問題

TabMain(TabHost)には、ChildTab(別のTabHost)と他の2つのアクティビティがあります。

他の2つのアクティビティでProgress Dialogを表示することができます。

しかしChildTab TabActivityに、私は5つの活動私はprogressDialogを表示することができことができるという点で

を追加しています。

次のエラーが発生しています。

ERROR/AndroidRuntime(339):原因:android.view.WindowManager $ BadTokenException:ウィンドウトークンを追加できませんでした。[email protected]が無効です。あなたの活動は実行されていますか?

+0

どのようにダイアログを表示しようとしていますか? – Cristian

+1

ProgressDialog progressDialog = ProgressDialog.show(T11.isis、 "Loading ..."、 "Please wait ...");この方法で.. –

答えて

8

は、私はそれが物事がworinkg作るだろうと思い... ProgressDialog progressDialog = ProgressDialog.show(getParent(), "Loading...", "Please wait...");

を試してみてください。

+1

ああ、getParent()はうまくいきましたBuddy ...ありがとうございました...しかし、その表示いくつかの時間の後、私はインターネットからデータを取得し、ここで最初の1または2秒後に進行状況が表示されます。ダイアログ、なぜか分かりますか? –

+0

'AsyncTask'を使用していますか? –

+0

いいえネットワークアクティビティとUIスレッドに単純なスレッドを使用しています –

2

私もこのエラーを発見し、解決策が見つかるまで怒りました。 上記の答えは正しいですが、私のケースでは、/より多くのアクティビティグループのタブ/アクティビティグループと内部の1つのアクティビティによってネストされたアプリケーションが作成されていました。あなたは、アプリケーションの文脈を得るまで、必要なだけ多くのレベルを上げる必要があります。私の場合があった2:

public static Activity goUp(Activity current){ 
     if(current.getParent()!=null){ 
      current=current.getParent(); 
      goUp(current); 
     } 
     return current; 
    } 
    ProgressDialog progressDialog = ProgressDialog.show(goUp(MyActivity.this), "Loading...", "Please wait..."); 
2

醜いソリューション:

 protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      parent = (ConfigurarionStyleAndroidGUI) getParent();    
      addPreferencesFromResource(R.xml.ui_settings); 
      EditTextPreference p = (EditTextPreference) getPreferenceManager().findPreference(getString(R.string.key_settings_style_name)); 
      forceContext(parent,p); 
     } 
     private void forceContext(Context context,Preference p){ 
     try { 
      Field field = Preference.class.getDeclaredField("mContext"); 
      field.setAccessible(true); 
      field.set(p, parent); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     }   
    } 
1

のgetParent()はあなたのために動作しない場合は、単にTabsActivity.contextを使用してみてください(またはあなたの親タブのアクティビティクラスの名前に置き換え)。ネストされたアクティビティを使用しているため、getParent()を使用してもダイアログの正しいコンテキストが返されません。で

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

AlertDialog.Builder builder = new AlertDialog.Builder(TabsActivity.context); 

、それが魅力のように働いていた私は、この行を置き換え上記の提案の20種類のバリエーションを試した後

。また、TabsActivityクラスでコンテキスト変数を作成する必要があります。 onCreateメソッドにはpublic static TabsActivity context;context=thisのようなものがあります。

関連する問題