小编Pau*_*ean的帖子

如何控制Android WebView历史/后台堆栈?

我试图找到一种方法来处理WebView后台堆栈,类似于Android Web浏览器在我自己的应用程序的WebView中按下后退按钮时如何处理它.

问题与Javascript重定向有关.WebView后备堆栈似乎包含只是重定向的URL.这是我的相关代码:

private class ArticleWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK)
    {
        WebView wv = (WebView)findViewById(R.id.web);
        if (wv.canGoBack())
        {
            wv.goBack();

            return true;
        }
    }

    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,按后退按钮可选择堆栈中的先前URL,该URL在调用shouldOverrideUrlLoading()之后加载到WebView本身.我实际上在shouldOverrideUrlLoading()中做了很多与这个特定问题无关的事情,所以"删除我的WebViewClient实现"对我来说不起作用.无论如何,当前一个URL是Javascript重定向时,该URL加载,然后Javascript立即重定向到WebView所在的URL.我无法禁用Javascript,因为网站依赖于它.我也无法更改网站(第三方).

这种重定向问题的结果是最终用户的恶性循环,他们疯狂地回击只是比Android网页处理引擎稍快.

现在这里有趣的地方:Android网页浏览器处理后退按钮就好了Javascript重定向!它遵循重定向很好,但后退按钮执行用户期望它做的事情.这意味着可以正确处理这种情况.Android Web浏览器如何处理此问题?

android

9
推荐指数
2
解决办法
3万
查看次数

Java缺乏模板继承导致Android中的主要代码重复问题.有解决方案吗

这是Android特定的.

我从一个自定义类派生我在Android中的所有活动,它提供了一个漂亮,干净的地方,可以放置应用程序中所有布局使用的公共代码,特别是一些常见的setContentView()覆盖代码,它将布局注入到我的布局中.所以这是典型的层次结构:

MyActivity extends MyBaseClass -> MyBaseClass extends Activity -> Activity
Run Code Online (Sandbox Code Playgroud)

对于我的某个应用,我需要Google地图支持.所以我试图将MyBaseClass转换为模板/泛型,以便我可以做类似的事情:

MyActivity extends MyBaseClass<MapActivity> -> MyBaseClass<T> extends T -> T
Run Code Online (Sandbox Code Playgroud)

当然,这无法编译,因为Java模板/泛型并不像我在尝试后不久发现的C++模板那样有用.所以我最终创建了一个完整的单独的类作为临时解决方法:

MyActivity extends MyBaseMapClass -> MyBaseMapClass extends MapActivity -> MapActivity
Run Code Online (Sandbox Code Playgroud)

并将MyBaseClass中的所有代码复制到MyBaseMapClass中.除了涉及进口的一些小改动之外,代码是相同的.它有效,但它不是一个好的解决方案.

我越过我的手指,上面将是问题的结束,我将永远不必再次重访它.

不幸的是,我开始尝试使用一个更复杂的基类的片段和活动组合,并且上面的代码重复问题变成了一个严重的问题.每当我在一个文件中进行更改时,我必须记住将其克隆到其他文件,并且开发速度足够快,以至于我很快就会失去同步.

Activity,MapActivity,FragmentActivity,ListActivity,PreferenceActivity等.我是否需要为我想要使用的每一个创建一个单独的派生类?我希望不会,因为这个原因,我已经开始限制我的推导(我的一些活动因此没有某些特征).我有时会使用两个独立的基类(其中一些活动需要将更多视图扩展到布局中,但并非所有活动都需要这样做),这进一步加剧了这个问题:

MyActivity extends MyBaseClass -> MyBaseClass extends Activity -> Activity

MyActivity2 extends AnotherBaseClass -> AnotherBaseClass extends MyBaseClass -> MyBaseClass extends Activity -> Activity
Run Code Online (Sandbox Code Playgroud)

If I want to use the code for AnotherBaseClass in Maps, I not only have to create MyBaseMapClass, but also AnotherBaseMapClass and copy …

java android multiple-inheritance

6
推荐指数
1
解决办法
267
查看次数

标签 统计

android ×2

java ×1

multiple-inheritance ×1