我正在创建一个包含3个ActionBar标签的网络应用。每个选项卡都会触发webview。在其中一个选项卡上,我需要Android设备后退按钮来触发该webview的goBack操作。我正在尝试类似于black How to add "Go Back" function in WebView inside Fragment?中blackbelt和netinept建议的解决方案,但我收到以下错误 - “我的MainActivity.java文件中的类型FragmentTab3未定义方法canGoBack()。
这是我的代码。请让我知道我可能做错了什么。
--- --- MainActivity.java
我得到的“方法canGoBack()未定义为FragmentTab3类型”
public class MainActivity extends SherlockFragmentActivity {
ActionBar.Tab Tab1,Tab2,Tab3;
Fragment fragmentTab1 = new FragmentTab1();
Fragment fragmentTab2 = new FragmentTab2();
Fragment fragmentTab3 = new FragmentTab3();
@Override protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
int index = getSupportActionBar().getSelectedNavigationIndex();
outState.putInt("selected_tab_index", index);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
// Hide Actionbar Icon
actionBar.setDisplayShowHomeEnabled(false);
// Hide Actionbar Title
actionBar.setDisplayShowTitleEnabled(false);
// Create Actionbar Tabs
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Set Tab Icon and Titles
Tab1 = actionBar.newTab().setText("Tab 1");
Tab2 = actionBar.newTab().setText("Tab 2");
Tab3 = actionBar.newTab().setText("Tab 3");
// Set Tab Listeners
Tab1.setTabListener(new TabListener(fragmentTab1));
Tab2.setTabListener(new TabListener(fragmentTab2));
Tab3.setTabListener(new TabListener(fragmentTab3));
// Add tabs to actionbar
actionBar.addTab(Tab1);
actionBar.addTab(Tab2);
actionBar.addTab(Tab3);
if (savedInstanceState != null) {
int index = savedInstanceState.getInt("selected_tab_index", 0);
getSupportActionBar().setSelectedNavigationItem(index);
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public void onBackPressed() {
Fragment webview = getSupportFragmentManager().findFragmentById(R.id.webview);
if (webview instanceof FragmentTab3) {
boolean goback = ((FragmentTab3)webview).canGoBack();
if (!goback)
super.onBackPressed();
}
}
}
--- --- FragmentTab3.java
public class FragmentTab3 extends SherlockFragment
{
public WebView webView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragmenttab3, container, false);
webView = (WebView) rootView.findViewById(R.id.webview);
webView.setBackgroundColor(0);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.example.com");
webView.requestFocusFromTouch();
return rootView;
}
}
--- --- fragmenttab3.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<WebView
android:id="@+id/webview"
android:tag="webview_tag"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
</LinearLayout>
答案 0 :(得分:0)
因为错误说Fragment没有名为canGoBack的方法。你可以这样做:
public class FragmentTab3 extends SherlockFragment
{
/// your code
public boolean canGoBack() {
return webView != null && webView.canGoBack();
}
}
答案 1 :(得分:0)
这在我的MainActivity.java中对我有用我使用了4个标签,每个标签都有一个Web视图。
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
int currPage = mPager.getCurrentItem();
WebView wv = null;
switch (currPage) {
case 0:
wv = (WebView) mPager.getChildAt(currPage).findViewById(R.id.webView1);
break;
case 1:
wv = (WebView) mPager.getChildAt(currPage).findViewById(R.id.webView2);
break;
case 2:
wv = (WebView) mPager.getChildAt(currPage).findViewById(R.id.webView3);
break;
case 3:
wv = (WebView) mPager.getChildAt(currPage).findViewById(R.id.webView4);
break;
}
if (wv != null) {
if (wv.canGoBack()) {
wv.goBack();
} else {
super.onBackPressed();
}
} else {
super.onBackPressed();
}
}