Как динамически добавлять вкладки, которые можно связать с выбранной пользователем веб-страницей

Я разрабатываю приложение, которое использует вкладки, каждая из которых связана с веб-страницей, которую пользователь сможет видеть и взаимодействовать с помощью веб-просмотра. у меня возникли проблемы с реализацией команды добавления, которую пользователь сможет использовать для добавления вкладки с 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);
}
}

У меня есть меню, определенное в основном файле, мне просто нужно создать методы, чтобы кнопки делали то, что они должны делать. любая помощь будет здорово


person Sean    schedule 01.12.2010    source источник


Ответы (1)


Итак, я думал, что уже ответил на ваш вопрос здесь

Кроме того, вам, кажется, нравится повторять похожие вопросы здесь и здесь

Как я уже говорил вам, вы можете добиться этого, создав активность, которая принимает URL-адрес в качестве дополнительного намерения.

Взяв ваш код за основу:

Браузер.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);
    }
}

макет/browser.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

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

<?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>    

Hope I'm not doing your homework.

person Tivie    schedule 13.12.2010