0

使用以下代码时出现以下错误

The method onKeyDown(int, KeyEvent) is undefined for the type SherlockFragment

 public boolean onKeyDown(int KeyCode, KeyEvent event) {
        if ((KeyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
            web.goBack();
            return true;
        }
        return super.onKeyDown(KeyCode, event);
    }
4

3 回答 3

1

Activity 应该管理后退按钮而不是片段。如果您希望片段管理 onKeyDown,您可以OnKeyListener在返回的视图上附加 ,getView()

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View view =  inflater.inflate(R.layout.left, container, false);
    view.setOnKeyListener( new OnKeyListener() {
          @Override
          public boolean onKey( View v, int keyCode, KeyEvent event ) {
                // here your code
          } 
     });
    return view;
}
于 2013-06-18T07:26:10.950 回答
1

在做了一些研究之后。我找到了这个 !希望它的帮助。

root =(ViewGroup) inflater.inflate(R.layout.setting_f_other, container, false);

    root.setOnKeyListener( new OnKeyListener() {
                      @Override
                      public boolean onKey(View v, int keyCode, KeyEvent event ) {
                          if (keyCode == KeyEvent.KEYCODE_BACK){
                            //Do something
                          }
                        return false;

                      } 
                 });
于 2013-09-30T11:09:28.900 回答
1

我会把这种事情排除在你的片段之外。以下代码在我的 MainActivity 中为我工作,其中有 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();
    }
}

编辑:我在第四个选项卡上遇到了麻烦,我的解决方案是将我的片段(Tab0.java)中的 webView 设置为静态。然后在我的主要活动中直接引用它。

switch (currPage) {
    case 0:
        wv = Tab0.webView;
        break;
    case 1:
        wv = Tab1.webView;
        break;
    case 2:
        wv = Tab2.webView;
        break;
    case 3:
        wv = Tab3.webView;
        break;
    }
于 2013-12-10T22:08:07.243 回答