2010-02-10 14 views
4

Supposons que j'ai un WebView ouvert:Comment afficher 2 vues dans 1 activité (Android)?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    main_webv = (WebView) findViewById(R.id.mainwebview); 
    main_webv.setWebViewClient(new HelloWebViewClient()); 
    main_webv.getSettings().setJavaScriptEnabled(true); 
    main_webv.getSettings().setSupportZoom(false); 
    main_webv.addJavascriptInterface(new HelloJavascriptInterface(),"hello"); 
    main_webv.setWebChromeClient(new HelloWebChromeClient()); 
    main_webv.loadUrl(SPLASH); 
    main_webv.setVisibility(4); 

    setContentView(R.layout.main_list);   
    main_listv = (ListView) findViewById(R.id.mainlistview);  


} 

Je veux simplement créer un ListView au-dessus de ce WebView (couvrant ... mais permettant tujoruos WebView à courir). Je pourrais activer et désactiver les vues. Merci.

Répondre

5

Vous pouvez utiliser FrameLayout; De cette façon, les Vues seront disposées les unes au-dessus des autres. Vous pouvez ensuite basculer leur visibilité en utilisant la méthode View.setVisibility(..).

[EDIT: CODE AJOUTÉE]

Ceci est ma mise en page XML (weblister.xml):

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <ListView 
    android:id="@+id/list_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 
    <WebView 
    android:id="@+id/webview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

</FrameLayout> 

Maintenant, je crée une activité qui aura à la fois ListView et WebView dans sa vue mais seulement un heirarchy d'entre eux seraient visibles:

public class WebAct extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.weblister); 

      //setup listview 
     ListView listView = (ListView) findViewById(R.id.list_view); 
     listView.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       new String[]{"One","Two"}){ 

     }); 
      // setup web view 
     WebView webView = (WebView) findViewById(R.id.webview); 

     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setSupportZoom(false); 

     webView.loadUrl("http://www.google.com"); 

      // set visibility  
     listView.setVisibility(View.INVISIBLE); 
     webView.setVisibility(View.VISIBLE); 
    } 

} 

note: Le code peut-être pas être complet mais j'espère que cela vous transmet mon point.

+0

Qu'en est-il de ListActivity? En ce moment, ma classe étend l'activité (pour mon webview). Mais je ne peux pas étendre les deux. – TIMEX

+0

ListActivity étend l'activité. Ainsi, votre classe peut étendre ListActivity et aussi avoir un WebView à l'intérieur. Vous aurez juste besoin d'un ListView dans votre fichier layout avec android: name = "@android: id/list" (si vous choisissez d'étendre ListActivity). En outre, pour votre information, il n'est pas nécessaire d'étendre ListActivity, vous pouvez demander à votre classe d'étendre Activity et d'avoir ListView et WebView dans votre fichier layout. – Samuh

+0

Je vais voir si je peux trouver du code pour vous ... juste pour que les choses soient plus claires – Samuh

1

Oui, setVisibility vous aidera probablement si vous souhaitez basculer par programmation les vues sur (View.VISIBLE) et désactiver (VIEW.GONE).

En ce qui concerne votre commentaire à Samuhs, répondez: En Java, vous n'avez pas d'héritage multiple. Mais ListActivity hérite de Activity donc une ListActivity est à peu près la même chose (et plus) qu'une Activity.

De plus, vous n'avez pas avez pour utiliser ListActivity pour afficher ListViews, il fournit simplement un peu de commodité pour gérer des activités basées sur des listes, car elles sont si communes.

Quelle est exactement l'erreur que vous obtenez?

+0

+1 pour avoir pris la liberté de répondre aux questions que le OP avait – Samuh