如何允许用户在Android应用程序中添加和删除选项卡

时间:2010-11-30 19:43:42

标签: android tabs android-webview add

我正在开发一个使用标签的应用程序,每个标签链接到一个网页,用户可以使用webview查看和交互。我遇到的问题是实现一个添加和删除命令,用户可以根据需要使用该命令删除选项卡,或者添加一个选项卡,其选项与其他选项一样。

以下是我的代码。

以下是所有其他文件使用的主要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 个答案:

答案 0 :(得分:2)

使用Mohammed提到的代码非常有用,但您可能需要添加

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

希望它会有所帮助。

答案 1 :(得分:0)

你可以这样使用: 1-添加每个选项卡以列出数组 2 - 删除特定选项卡,首先将其从列表中删除并清除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

我希望这会有所帮助。

微米。