2010-11-30 2 views
2

Я разрабатываю приложение, которое использует вкладки с каждой вкладкой, связанной с веб-страницей, с которой пользователь сможет видеть и взаимодействовать с использованием веб-просмотра. У меня возникают проблемы с внедрением команды добавления и удаления, которую пользователь сможет использовать для удаления вкладки, если это необходимо, или добавить вкладку с URL-адресом по своему выбору, который работает так же, как и другие.Как разрешить пользователю добавлять и удалять вкладки в приложении android

Ниже приведен мой код.

Вот основной файл Java, что все остальные файлы используют:

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; 
    } 
} 

Тогда я каждый веб-страницы определяется в отдельном Java файл, который основной файл вызывает ниже один из них:

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); 
} 
} 

У меня есть меню, определенное в основном файле. Мне просто нужно построить методы, чтобы кнопки делали то, что они должны делать. Любая помощь будет большой.

ответ

0

Вы можете использовать этот способ: 1- добавить каждые вкладки в список массива 2-удалить вкладку spesific, сначала удалите его из списка и удалить все вкладки из tabHost и добавить их из списка.

проверить этот код, который имеет общее представление о том, как удалить вкладки из tabHost динамически:

// 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); 

ресурс: http://www.coderanch.com/t/460859/Android/Mobile/TabHost-Remove-Tab

Я надеюсь, что это поможет.

М.

2

Используя код, указанный Мухаммедом может быть полезным, но вам может понадобиться добавить

tabs.setCurrentTab(0); 

перед вызовом

tabs.clearAllTabs(); 

в соответствии с проблемой, описанной в http://code.google.com/p/android/issues/detail?id=2772. Тогда ваша вкладка, вероятно, удаляется, но вы можете заметить ошибку при попытке переключиться или добавить вкладки. Для меня эта проблема была устранена после звонка

tabs.setCurrentTab(index); 

внутри цикла for (после добавления вкладки).

Таким образом, вы должны получить:

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*** 
} 

Надеется, что это поможет.