如何添加标签动态可链接到用户选择网页 [英] How to add tabs dynamically that can be linked to a users choice of webpage

查看:161
本文介绍了如何添加标签动态可链接到用户选择网页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发,使用卡口与每个标签被链接到网页的用户将能够看到和使用web视图交互的应用程序。什么我有正在实施一项add命令,用户将能够使用添加标签与他们所选择的URL的作品跟人家一样麻烦

I am developing an application that uses tabs with each tab being linked to a webpage that the user will be able to see and interact with using webview. what i am having trouble with is implementing a add command that the user will be able to use to add a tab with a url of their choice that works just like the others

下面是我的code

下面是所有其他文件中使用的主要的Java文件

Here is the main java file that all other files use

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文件中定义的每个网页的主要文件的调用
下面是其中之一。

Then i have each webpage defined in a seperate java file that the main file calls below is one of them

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);
}
}

我在主文件我只需要构造方法来定义这样的按钮做他们该做的菜单。任何帮助将是巨大的。

I have the menu defined in the main file i just need to construct the methods so the buttons do what they are suppose to do. any help would be great

推荐答案

好了,所以我想我已经回答了你的问题<一href=\"http://stackoverflow.com/questions/4309964/how-to-implement-a-command-that-allows-user-to-add-and-delete-tabs-in-the-applica/4310440#4310440\">here

Ok so I thought I've already answered to your question here

此外,你似乎想复制类似的问题<一href=\"http://stackoverflow.com/questions/4317808/how-to-allow-user-to-add-and-delete-tabs-in-an-android-application\">here和<一个href=\"http://stackoverflow.com/questions/4339382/how-to-put-a-progress-bar-in-an-application-using-tabs\">here

Besides, you seem to like to replicate similar questions here and here

就像我已经告诉你了,你可以通过创建一个接受URL作为意向额外的活动acomplish这一点。

Like I've already told you, you can acomplish this by creating an activity that accepts an url as an extra of an intent.

以你的code为基地启动:

Taking your code as a base start:

Browser.java

Browser.java

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class Browser extends Activity {

    private WebView webview;

    private String URL;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.browser);

        Bundle extras = getIntent().getExtras();

        if (extras == null) {

            URL = "http://www.evonytools.org/";

        } else {

            this.URL = extras.getString("URL");
        }

        getWebView();

    }

    public void getWebView() {

        webview = (WebView) findViewById(R.id.webview);
        webview.setWebViewClient(new HelloWebViewClient());
        webview.getSettings().setJavaScriptEnabled(true);
        webview.loadUrl(this.URL);
    }

    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);
    }
}

布局/ broswer.xml

layout/broswer.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"
>
    <WebView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview"
    />
</LinearLayout>

Main.java

Main.java

public class Main extends TabActivity{

        private TabHost tabHost;

        private EditText addressBar;

        private final static String DEFAULT_URL = "http://www.evonytools.org/";

        private int z = 0;

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

            this.tabHost = getTabHost();  // The activity TabHost
            this.addressBar = (EditText) findViewById(R.id.address_bar);
            this.addressBar.setText(DEFAULT_URL);


            ImageButton addBtn = (ImageButton) findViewById(R.id.add_btn);

            addBtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    addMethod();    
                }
            });

            Intent openBrowser = new Intent(); 
            openBrowser.setClass(this, Browser.class);
            openBrowser.putExtra("URL", DEFAULT_URL);
            tabHost.addTab(tabHost.newTabSpec("Main").setIndicator(getHost(DEFAULT_URL)).setContent(openBrowser));

        }




        private void addMethod() {

            String webSiteURL = validateURL(addressBar.getText().toString().trim());
            String webSiteName = getHost(webSiteURL);

            Intent openBrowser = new Intent(); 
            openBrowser.setClass(this, Browser.class);
            openBrowser.putExtra("URL", webSiteURL);

            tabHost.addTab(tabHost.newTabSpec(webSiteName + Integer.toString(z)).setIndicator(webSiteName).setContent(openBrowser));

            ++z;
        }

        private void deleteMethod() {

            // Since we can't really delete a TAB
            // We hide it

            int position = tabHost.getCurrentTab();

            if (position != 0 ) {

                tabHost.getCurrentTabView().setVisibility(8);
                tabHost.setCurrentTab(0);
            }
        }

        // 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:

                    addMethod();

                    break;

                case R.id.delete:

                    deleteMethod();

                    break;
            }
            return true;
        }

        private String validateURL(String url) {

            StringBuffer urlB = new StringBuffer();

            // checks if addressBar has a valid URL
            // you can add stuff here in order to validate
            // this is just an example
            if (url.startsWith("http://")) {urlB.append(url);} else {urlB.append("http://");}

            try {
                URL urlTry = new URL(urlB.toString());

                return urlB.toString();

            } catch (MalformedURLException e) {

                return "http://www.google.com/";
            }   
        }

        private String getHost(String url) {

            try {

                URL urlTry = new URL(url);

                return urlTry.getHost().replace("www.", "").replace(".com", "").replace(".org", "").replace(".net", "");

            } catch (MalformedURLException e) {

                return "Browser";
            }
        }
}

tabs_main.xml

tabs_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
            android:tag="tabPane"
             />
        <RelativeLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
            <EditText
                android:id="@+id/address_bar"
                android:layout_width="270px"
                android:layout_height="50px"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
            />
            <ImageButton
                android:id="@+id/add_btn"
                android:layout_width="50px"
                android:layout_height="50px"
                android:src="@android:drawable/ic_menu_add"
                android:background="@android:color/transparent"
                android:layout_toRightOf="@id/address_bar"
            />

        </RelativeLayout>
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="2dp" />
    </LinearLayout>    

希望我没有做功课。

这篇关于如何添加标签动态可链接到用户选择网页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆