【问题标题】:How to allow user to Add and Delete Tabs in an android application如何允许用户在 android 应用程序中添加和删除选项卡
【发布时间】:2010-11-30 19:43:42
【问题描述】:

我正在开发一个使用选项卡的应用程序,每个选项卡都链接到用户将能够使用 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);
}
}

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

【问题讨论】:

    标签: android tabs android-webview add


    【解决方案1】:

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

    希望它会有所帮助。

    【讨论】:

      【解决方案2】:

      您可以这样使用: 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.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多