如何实现允许用户在应用程序中添加和删除选项卡的命令?

时间:2010-11-30 02:18:21

标签: android tabs android-webview add

我正在尝试使用顶部的标签创建一个应用程序,每个标签链接一个网站,例如在safari或firefox中使用标签的计算机。我要做的是实现一个添加和删除类,允许用户删除选项卡,如果需要,添加另一个将链接到不同的网站。任何帮助将不胜感激。

这是主要的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文件使用的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);
}
}

在添加新标签时,如何实现添加和删除按钮以使其具有相同的格式。

1 个答案:

答案 0 :(得分:0)

为了达到预期的效果,您可能需要为每个选项卡方法删除一个活动。

相反,您可以创建一个“默认”视图,您可以将其用于接受该URL作为参数的所有网站。

然后,不是将每个标签的“新活动”“意图”,而是将该视图扩展到新标签页,将URL作为参数传递。

创建和删除选项卡非常简单。一个简单的按钮可以膨胀/移除视图。


XML

RES /布局/ main.xml中

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="5dp" />
    </LinearLayout>    
</TabHost>

RES /布局/ tab.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<TextView
android:id="@+id/url_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HELLO TAB!"
>
</TextView>
</LinearLayout>

RES /菜单/ menu.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:enabled="true" android:visible="true" android:icon="@android:drawable/ic_menu_add" android:title="Add Website" android:titleCondensed="add" android:id="@+id/add"></item>
<item android:titleCondensed="Delete" android:enabled="true" android:visible="true" android:icon="@android:drawable/ic_menu_delete" android:id="@+id/delete" android:title="Delete Website"></item>
</menu>

JAVA CODE

main.java

import android.app.TabActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TabHost;
import android.widget.TextView;


public class Main extends TabActivity implements TabHost.TabContentFactory {


    TabHost tabHost;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.tabHost = getTabHost();  // The activity TabHost

        tabHost.addTab(tabHost.newTabSpec("http://www.google.com/").setIndicator("Google").setContent(this));
        tabHost.addTab(tabHost.newTabSpec("http://www.stackoverflow.com/").setIndicator("StackOverflow").setContent(this)); 
    }

    public View createTabContent(String tag) {

        // Inflation per se.
        // we don't return anything yet so we can work with this view
        View tab = View.inflate(this, R.layout.tab, null);

        // Here we work with the view
        // in this case we set the textview to match our tag
        // its a good way to parse arguments to the new tab
        TextView tv = (TextView) tab.findViewById(R.id.url_tv);
        tv.setText(tag);

        //After work we can return view
        return tab;  
    }


    private void addMethod(String webSiteURL, String webSiteName) {

        // Find a way that suits you to pass arguments to here

        tabHost.addTab(tabHost.newTabSpec(webSiteURL).setIndicator(webSiteName).setContent(this));

    }

    private void deleteMethod() {

        // Create a way to decide which tab to delete.
        // for instance, FindViewByTag is a method of ViewGroup and works
        // then call the parent of the view with
        // ViewGroup parent = (ViewGroup) viewToDelete.getParent();
        // finally use oarent.removeView(viewToDelete);

    }

    // Inflates menu when "menu Key" is pressed
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }


    // This method is called once the menu is selected
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        switch (item.getItemId()) {

            case R.id.add:

                // These variable is created artificially so that something is passed to our addMethod
                // You should find a way to pass these argument to our method
                // can be a dialog screen, or getting the URL from somewhere
                // its your call
                String webSiteURL = "http://www.evonytools.org/";
                String webSiteName = "Tivie's Tools";

                addMethod(webSiteURL, webSiteName);

            case R.id.delete:

                deleteMethod();

                break;
        }
        return true;
    }  
}