2

我正在创建一个带有 3 个 ActionBar 选项卡的 Web 应用程序。每个选项卡都会触发一个 webview。在其中一个选项卡上,我需要 Android 设备后退按钮来触发该 web 视图的 goBack 操作。我正在尝试类似于 blackbelt 和 netinept 在如何在 Fragment 内的 WebView 中添加“返回”功能?,但我收到以下错误 - 我的 MainActivity.java 文件中的“FragmentTab3 类型的方法 canGoBack() 未定义”。

这是我的代码。请让我知道我可能做错了什么。

---MainActivity.java---

我在哪里得到“FragmentTab3 类型的方法 canGoBack() 未定义”

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

2 回答 2

0

正如错误所说,Fragment 没有名为 canGoBack 的方法。你可以这样做:

public class FragmentTab3 extends SherlockFragment
 {
   /// your code

    public boolean canGoBack() {
        return webView != null && webView.canGoBack();
    }

}
于 2013-10-08T19:09:44.433 回答
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();
    }
}
于 2013-12-10T22:03:56.240 回答