2011-10-17 3 views
0

J'ai un programme avec 4 onglets différents.L'utilisation de ActivityGroup pour basculer entre les vues provoque StackOverflowError

Un de ces onglets est un groupe d'activités qui contient un ListView. Lorsque je clique sur l'un des éléments de la liste, il passe à WebActivity:

 lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
       Intent intent = new Intent(TabActivity2.this, WebActivity.class); 
       Bundle b = new Bundle(); 
       b.putString("URL", URLs[(int)id]); 
       b.putString("prevActivity", "TabActivity2"); 
       intent.putExtras(b); 
       replaceContentView("web", intent); 
      } 
     }); 
    } 

    public void replaceContentView(String id, Intent newIntent) { 
     View view = getLocalActivityManager().startActivity(id,newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView(); this.setContentView(view); 
    } 

Alors maintenant, nous sommes dans la classe WebActivity. Voici le code:

public class WebActivity extends ActivityGroup { 
    WebView mWebView; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.web); 

     Bundle b = getIntent().getExtras(); 
     String URL = b.getString("URL"); 

     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.getSettings().setPluginsEnabled(true); 
      mWebView.requestFocus(); 
     mWebView.loadUrl(URL); 

     mWebView.setWebViewClient(new FirstTabWebViewClient());   
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      mWebView.goBack(); 
      return true; 
     } 
     Bundle b = getIntent().getExtras(); 
     String retActivity = b.getString("prevActivity"); 
     if (retActivity == "TabActivity2") { 
      Intent intent = new Intent(WebActivity.this, TabActivity2.class); 
      replaceContentView("list_webpages", intent); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
    public void replaceContentView(String id, Intent newIntent) { 
     View view = getLocalActivityManager().startActivity(id,newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView(); this.setContentView(view); 
    } 

je devais mettre en œuvre ma propre onKeyDown car sinon appuyer sur le bouton Retour a abouti à la fermeture de l'application plutôt que de retourner à la ListView.

Donc le StackOverflowError semble être un problème structurel dans mon programme et je ne sais pas comment résoudre ce problème. Toute aide serait appréciée.

+0

FYI, ActivityGroup a été abandonné. Pensez à utiliser des fragments à la place et la bibliothèque de compatibilité. –

Répondre

0

J'ai fini par utiliser un FrameLayout dans la même activité avec WebView et ListView et utilisé la visibilité pour basculer entre eux.

Questions connexes