2

タブを使用するアプリケーションを開発しています。各タブは、ユーザーが webview を使用して表示および操作できる Web ページにリンクされています。私が問題を抱えているのは、ユーザーが必要に応じてタブを削除したり、他のものと同じように機能する選択した 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ファイルで各Webページを定義し、それらの1つを以下に示します。

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 に答える