【问题标题】:webview fragment press back to return towebview片段按回返回
【发布时间】:2016-04-25 11:33:11
【问题描述】:

您好,我有一个recycleview 的安卓应用程序。当用户在回收viewholder 上单击button 时。应用程序将启动webview(在fragment 内)。我想处理当用户单击返回按钮时,webview 如果有历史记录将返回,如果没有历史记录,应用程序将关闭webview 片段并返回recycleview

有历史的时候我已经成功处理了后面(但是如果没有历史,webview就无法返回recycle view

这是我的 webview 代码

webView.setOnKeyListener(new View.OnKeyListener() {

                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (keyCode == KeyEvent.KEYCODE_BACK) {
                        if (webView.canGoBack()) {
                            webView.goBack();
                        }else {
                            getActivity().getSupportFragmentManager().popBackStack();
                        }
                        return true;
                    }
                    return false;
                }

            });

这些代码有什么问题吗?任何帮助都非常感谢。谢谢

编辑我在recycleviewadapter类中使用这些代码来处理按钮点击ViewHolder

url.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Bundle bundle = new Bundle();
                    bundle.putString("topStoryUrl", topStories.get(getLayoutPosition()).getUrl());

                    TopStoryWebView topStoryWebViewFragment = new TopStoryWebView();
                    topStoryWebViewFragment.setArguments(bundle);
                    if (ItemListActivity.mTwoPane) {

                        ((FragmentActivity) context).getSupportFragmentManager()
                                .beginTransaction()
                                .add(R.id.item_detail_container, topStoryWebViewFragment)
                                .commit();
                    } else {
                        topStoryWebViewFragment.setArguments(bundle);
                        ((FragmentActivity) context).getSupportFragmentManager()
                                .beginTransaction()
                                .add(R.id.frameLayout, topStoryWebViewFragment)
                                .commit();
                    }
                }
            });

【问题讨论】:

  • 您是否在您的 recyclerview 所在的同一活动中使用该片段?或者您正在对片段使用单独的活动。
  • 您好,感谢您的回复。我已经编辑了这个问题。我将按钮句柄放在 recycleView 适配器 ViewHolder 类中
  • ((FragmentActivity) context).getSupportFragmentManager().beginTransaction() .add(R.id.item_detail_container, topStoryWebViewFragment) // 将此事务添加到后台堆栈(名称是此事务的可选名称返回堆栈状态,或为空)。 .addToBackStack(null) .commit();
  • 尝试用上面的替换监听器中的 if 条件并检查..
  • 像魅力一样工作。非常感谢您的帮助。

标签: android webview fragment back


【解决方案1】:

addToBackStack 会将您的片段添加到堆栈中,您可以稍后访问此堆栈

((FragmentActivity) context).getSupportFragmentManager()
.beginTransaction()
.add(R.id.item_detail_container, topStoryWebViewFragment) 
// Add this transaction to the back stack (name is an optional name for this back stack state, or null). 
.addToBackStack(null) 
.commit();

【讨论】:

  • 非常感谢您的帮助。顺便说一句,我如何命名后退并稍后调用(例如返回特定的后退状态而不是当前的当前后退状态
  • 对不起,我还不知道,如果我有任何解决方案,我会联系你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多