2

我正在开发一个使用选项卡的应用程序,每个选项卡都链接到用户将能够使用 webview 看到并与之交互的网页。我遇到的问题是实现一个添加和删除命令,如果需要,用户可以使用该命令删除一个选项卡,或者添加一个带有他们选择的 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);
}
}

我在主文件中定义了菜单,我只需要构造方法,以便按钮执行它们应该执行的操作。任何帮助都会很棒。

4

2 回答 2

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

希望它会有所帮助。

于 2012-02-10T10:05:30.987 回答
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

我希望这将有所帮助。

M。

于 2010-11-30T22:21:46.533 回答