Как разрешить пользователю добавлять и удалять вкладки в приложении Android - PullRequest
2 голосов
/ 30 ноября 2010

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

Ниже мой код.

Вот основной файл 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);
}
}

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

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

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

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

Надеюсь, это поможет.

0 голосов
/ 01 декабря 2010

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

checkэтот код, который имеет базовое представление о том, как динамически удалять вкладки из 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

Надеюсь, это поможет.

M.

...