2010-11-30 3 views
2

Je développe une application qui utilise des onglets avec chaque onglet étant lié à une page Web que l'utilisateur pourra voir et interagir avec Webview. Ce qui me pose problème, c'est l'implémentation d'une commande add and delete que l'utilisateur pourra utiliser pour supprimer un onglet si désiré ou ajouter un onglet avec une URL de son choix qui fonctionne comme les autres.Comment autoriser l'utilisateur à ajouter et supprimer des onglets dans une application android

Voici mon code.

est ici le principal fichier java que tous les autres fichiers utilisent:

public class UniversityofColorado extends TabActivity { 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    TabHost host=getTabHost(); 

    host.addTab(host.newTabSpec("one") 
      .setIndicator("Google") 
      .setContent(new Intent(this, Hello.class))); 

    host.addTab(host.newTabSpec("two") 
        .setIndicator("Colorado Main Site") 
        .setContent(new Intent(this, ColoradoMainSiteBrowser.class))); 

    host.addTab(host.newTabSpec("three") 
        .setIndicator("CULearn") 
        .setContent(new Intent(this, CULearnBrowser.class))); 

    host.addTab(host.newTabSpec("four") 
      .setIndicator("CULink") 
      .setContent(new Intent(this, CULinkBrowser.class))); 

    host.addTab(host.newTabSpec("five") 
      .setIndicator("MyCUInfo") 
      .setContent(new Intent(this, MyCUInfoBrowser.class))); 

    host.addTab(host.newTabSpec("six") 
      .setIndicator("Campus Map") 
      .setContent(new Intent(this, CampusBrowser.class))); 

    host.addTab(host.newTabSpec("Seven") 
      .setIndicator("Notes") 
      .setContent(new Intent(this, Notepadv3.class))); 
} 




    // Inflates menu when "menu Key" is pressed 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu, menu); 
     return true; 
    } 
} 

Ensuite, je chaque page Web définie dans un fichier java séparé que le principal appelle fichier ci-dessous est l'un d'entre eux:

public class ColoradoMainSiteBrowser extends Activity { 

WebView webview; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
webview = (WebView) findViewById(R.id.webview); 
webview.setWebViewClient(new HelloWebViewClient()); 
webview.getSettings().setJavaScriptEnabled(true); 
webview.loadUrl("http://colorado.edu/"); 
} 
private class HelloWebViewClient extends WebViewClient { 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) 
{ 
view.loadUrl(url); 
return true; 
} 
} 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { 
webview.goBack(); 
return true; 
} 
return super.onKeyDown(keyCode, event); 
} 
} 

J'ai le menu défini dans le fichier principal J'ai juste besoin de construire les méthodes pour que les boutons fassent ce qu'ils sont censés faire. Toute aide est la bienvenue.

Répondre

0

Vous pouvez utiliser cette façon: 1- ajouter tous les onglets à la liste tableau 2 pour supprimer un onglet spesific, d'abord le supprimer de la liste et effacer tous les onglets de tabHost et les ajouter à nouveau de la liste.

vérifier ce code qui a idée de base de la façon de supprimer les onglets de tabHost dynamiquement:

// data structure, what I referred to as memory 
ArrayList<TabHost.TabSpec> list = new ArrayList<TabHost.TabSpec>(); 

// when you are adding tabs to tab host 
// what you add, you remember 
TabHost.TabSpec spec = tabs.newTabSpec("tag1"); 
spec.setContent(R.id.button); 
spec.setIndicator("TabONe"); 
tabs.addTab(spec); 
list.add(spec); 
... 
// when you want to remove 
list.remove(list.size()-1); // remove it from memory 
tabs.clearAllTabs(); // clear all tabs from the tabhost 
for(TabHost.TabSpec spec : list) // add all that you remember back 
    tabs.addTab(spec); 

ressource: http://www.coderanch.com/t/460859/Android/Mobile/TabHost-Remove-Tab

J'espère que cela vous aidera.

M.

2

En utilisant du code mentionné par Mohammed peut être utile, mais vous devrez peut-être ajouter

tabs.setCurrentTab(0); 

avant d'appeler

tabs.clearAllTabs(); 

selon problème décrit à http://code.google.com/p/android/issues/detail?id=2772. Votre onglet est probablement supprimé, mais vous pouvez remarquer une erreur lors de la tentative de changement ou d'ajout d'onglets. Pour moi, ce problème a été corrigé après l'appel

tabs.setCurrentTab(index); 

à l'intérieur de la boucle for (après l'ajout de l'onglet).

Vous devriez obtenir:

list.remove(nTabToRemoveIndex); 
tabs.setCurrentTab(0); // <== ***FIRST EDIT*** 
tabs.clearAllTabs(); 
int nTabIndex = 0;  // <== ***SECOND EDIT*** 
for(TabHost.TabSpec spec : list) 
{ 
    tabs.addTab(spec); 
    tabs.setCurrentTab(nTabIndex++); // <== ***THIRD EDIT*** 
} 

espère que cela aidera.

Questions connexes