小编kri*_*son的帖子

如何创建接口的匿名实现?

我有一个界面:

interface TileSet {
    fun contains(x: Int, y: Int) : Boolean
}
Run Code Online (Sandbox Code Playgroud)

我希望能够创建多组瓷砖(瓷砖是一对x和y整数坐标):

fun TileSet.union(another: TileSet) : TileSet = 
   // ..
Run Code Online (Sandbox Code Playgroud)

在Java 8中,我可以这样做:

@FunctionalInterface
public interface TileSet {
    boolean contains(int x, int y);

    public default TileSet unite(TileSet another) {
        return (x, y) -> TileSet.this.contains(x, y) && another.contains(x, y);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以接口是用lambda实现的TileSet#unite().或者它可以用旧的匿名类方法实现:

public default TileSet unite(TileSet another) {
    return new TileSet() {
         @Override
         public boolean contains(int x, int y) {
             return TileSet.this.contains(x, y) && another.contains(x, y);
         }
    }
} …
Run Code Online (Sandbox Code Playgroud)

interface kotlin

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

了解Android webview javascript界面

我创建了一个android WebView,并javascript使用注入接口addJavascriptInterface(mObject, "jsinterface").它工作正常,直到我使用new运算符在JavaScript中创建具有相同名称(jsinterface)的对象.

我的Java代码:

WebView mWebView = findViewById(R.id.myWebView);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new MyWebChromeClient((Activity)mContext));
mWebView.addJavascriptInterface(new testClass(), "jsinterface");
mWebView.loadUrl("UrlToLoad");
Run Code Online (Sandbox Code Playgroud)

testClass.java

public class testClass{
    public testClass() {
    }

    @JavascriptInterface
    public String testNativeMethod() {
        return "Java method called!!";
    }
}
Run Code Online (Sandbox Code Playgroud)

我的Java脚本代码

test.js

function test(msg){
    this.message = msg;

    this.testJSMethod = function(){
        return this.message;
    }
}

alert(jsinterface.testNativeMethod()); // prints Java method called!!
jsinterface= new test("JS method called...");
alert(jsinterface.testJSMethod()); // prints JS method called...
alert(jsinterface.testNativeMethod()); // errors "NPMethod called on non- NPObject" …
Run Code Online (Sandbox Code Playgroud)

javascript java android webview

7
推荐指数
2
解决办法
1万
查看次数

在Android中构建无限可滚动日历的视图

这不是代码问题,我将指南解释为正常.

我一直在研究一种在Android中构建无限滚动日历视图的方法,但我已陷入僵局.

现在我的困境是,大多数类似的观点都让他们的孩子以反复的方式相互放置.我的意思是:

项目4在项目3之后,在项目2之后,并且在所有项目之间存在恒定的填充/边距.

我需要的是一种生成无限长可滚动视图的方法,该视图可能包含也可能不包含项目.这些项目应放置在视图中的可变位置.我可以描述类似外观视图的最佳方式是可以无限滚动的为期一天的日历视图.

到目前为止,我最好的两个赌注是使用新RecyclerView的定制LayoutManager(这看起来非常复杂,但仍然没有完全由谷歌记录).我喜欢这种方法,因为除了其他方面,它还针对在有限视图中显示大型集合进行了优化.

我的另一个解决方案是建立一个完全自定义View.但是,使用该解决方案,我松开了适配器,除非我构建容器视图(这可能比构建布局管理器更复杂).

你会如何解决这样的问题?感谢提示,我不需要代码示例,只是想法哪条路径是最好的解决这个问题.

谢谢.

如果我误解了指南,请道歉

编辑:我如何解决这个问题 我的第一个使用RecyclerView与一个特殊的装饰器的解决方案似乎很有希望,但它仍然是一个"黑客",所以我们决定不去寻找那个解决方案,因为我们害怕它会产生的复杂性.

为了解决这个问题,我使用了SurfaceView而不是Adapter,这意味着必须重写SurfaceView的所有适配器功能,但这似乎是解决这个非常自定义绘图和布局管理问题的最佳方法 - 案件.

构建可以处理这种布局问题的自定义Viewgroup仍然会很好.

android custom-view android-custom-view infinite-scroll android-recyclerview

6
推荐指数
2
解决办法
3118
查看次数

在Android应用程序之间共享身份验证令牌

我需要在 2 个或多个 android 应用程序之间共享一个通用的永久登录(身份验证令牌)。诀窍是不需要安装任何一个应用程序即可让另一个应用程序工作。它们彼此独立。

因此,在应用程序登录之前,它会询问“是否可能有另一个友好的应用程序可以给我(或已存储在某处)一个我可以使用的令牌?”

显然,我可以使用多种方法(和问题)来解决这个问题:

  • 使用共享服务(需要二次安装,哪个应用安装?)
  • 使用共享内容提供程序(需要二次安装,哪个应用程序安装它?)
  • 使用系统上的文件(如果文件存在/可能无法在每个设备上访问)
  • 使用共享首选项(我相信在某些 android 版本上,全局共享首选项是不可能的)
  • 使用有序广播(唤醒另一个可能的应用程序并询问它)

stackoverflow 的人认为什么是简单但又健壮的最佳方法?

android

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

如何在 ADB 上传递新行

我希望能够在使用以下 ADB 命令连接到我的计算机时从我的 Android 手机发送短信,因此我参考了此链接。 从我的 Android 手机发送短信

adb shell am start -a android.intent.action.SENDTO -d sms:CCXXXXXXXXXX --es sms_body "SMS BODY \n GOES HERE" --ez exit_on_sent true
adb shell input keyevent 22
Run Code Online (Sandbox Code Playgroud)

adb shell input keyevent 66

它对我来说很好用,所以当我开始测试它时,我可以发送字符、空格、特殊字符,但不能发送新行。假设我尝试通过时有 2 行文本,发送了第一行字符,但未发送第二行字符。所以我想知道如何通过adb发送多行。即使我尝试了所有转义序列字符,但仍然无法通过。所以任何人都可以告诉我如何解决这个问题.. 提前致谢。

shell android adb

5
推荐指数
1
解决办法
3023
查看次数

Android:使用 Spannable 将带有项目符号的文本放入 TextView

我需要用几种语言写一些文本。文本看起来像:

标题

另一个标题

项目符号的颜色与其他文本不同。

我听说过Spannablein Android,但不幸的是我只能使用spanwithfromendint 值。问题在于,在不同的语言中,我的单词会有不同的位置,因此可跨文本不适合我。你能帮我以简单的方式解决这个问题吗?

android textview spannablestring

5
推荐指数
1
解决办法
3283
查看次数

如何对retrofit2回调进行单元测试?

我想做一个单元测试验证,如果function1()还是function2()被调用.我之前没有使用过回调,你能告诉我怎么做吗?

public void sendData(HttpService service, Document userData) {
    Call<String> call = service.updateDocument(getId(), userData);

    call.enqueue(new Callback<String>() {
    @Override
    public void onResponse(Call<String> call, Response<String> response) {
        function1(response.code());
    }

    @Override
    public void onFailure(Call<String> call, Throwable t) {
        function2();
    }
    });
}
Run Code Online (Sandbox Code Playgroud)

android unit-testing mockito powermock retrofit2

5
推荐指数
1
解决办法
938
查看次数

通过参数将Spannable应用到string.xml中的字符串

我在中定义了以下字符串string.xml

<string name="photo_heading"><xliff:g name="name">%s</xliff:g> shared a <xliff:g name="permission">%s</xliff:g><xliff:g name="photo">%s</xliff:g> with you.</string>
Run Code Online (Sandbox Code Playgroud)

String 接受 3 个字符串参数:name, permission,photo

我有两种设置不同风格的方法。

public Spannable getStyledItalic(String text) {
        Spannable sb = new SpannableString(text);
        sb.setSpan(new StyleSpan(Typeface.ITALIC), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        return sb;
    }
Run Code Online (Sandbox Code Playgroud)

public Spannable getStyledName(String name) {
        Spannable sb = new SpannableString(name);
        sb.setSpan(new AbsoluteSizeSpan(LPConstants.FONT_SIZE_NAME), 0, name.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        sb.setSpan(new StyleSpan(Typeface.BOLD), 0, name.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        sb.setSpan(new ForegroundColorSpan(mContext.getResources().getColor(R.color.app_primary)), 0, name.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        return sb;
    }
Run Code Online (Sandbox Code Playgroud)

现在我将这些样式应用于不同的参数并返回字符串,但这不起作用。这是我正在做的事情:

public String getHeading(Printrequest printRequest) {
        String name = printRequest.sentbyname;
        String …
Run Code Online (Sandbox Code Playgroud)

xml string android spannablestring

5
推荐指数
1
解决办法
3932
查看次数