如何动态添加标签,可以链接到用户选择的网页 [英] How to add tabs dynamically that can be linked to a users choice of webpage
问题描述
我正在开发一个应用程序,该应用程序使用每个标签链接到用户将能够使用webview来查看和交互的网页的标签。我遇到麻烦的是实现一个添加命令,用户可以使用它添加一个选项卡,他们选择的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
以下是我的代码
以下是所有其他文件使用的主要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
推荐答案
好吧,我以为我已经回答了你的问题here
Ok so I thought I've already answered to your question here
Besides, you seem to like to replicate similar questions here and here
像我已经告诉过你,你可以通过创建一个接受一个url作为一个意图的活动。
Like I've already told you, you can acomplish this by creating an activity that accepts an url as an extra of an intent.
以你的代码为基础开始:
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);
}
}
layout / 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>
希望我不会你的家庭作业。
Hope I'm not doing your homework.
这篇关于如何动态添加标签,可以链接到用户选择的网页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!