【问题标题】:how to update event bus function in android kotlin [duplicate]如何在android kotlin中更新事件总线功能[重复]
【发布时间】:2019-12-07 05:56:23
【问题描述】:

我正在尝试更新同时更新进度条的事件总线功能。但它没有更新。我在 EVENT BUS 中使用了背景、异步、主线程,但每当我更新页面进度条时,它的值都会发生变化,并且它的值也会更新,但如果不更新整个页面,我就无法做到这一点。

@Subscribe(threadMode = ThreadMode.BACKGROUND)
fun onPercentageEvent(percent: DownloadEvent){
    adapter.setOnChangeProgressListener{ id, view ->
        var progress = view as ProgressBar
        progress.progress = percent.percent.toInt()
        Timber.tag("SSS").d("progress: ${percent.percent}")
    }
}

这是我使用 EVENT BUS 更新进度条的地方

【问题讨论】:

  • 像在纸上一样解决它,创建一个循环,如果它大于 10(进位),将添加第一个(最右边)2 位数字并记下。努力工作到最左边的数字。还将所有内容存储为字符串,当然除了您在循环中添加的 2 位数字
  • 这是我们在学校学习的基本知识。你只需要编码。
  • 嗨 Jakhongir Jalilov。如果您想提出与您得到的答案完全不同的问题,请创建一个新问题;即使间接通过重复,但特别是如果人们真的为你写了一个单独的答案。

标签: java android kotlin logic


【解决方案1】:

如果这是你的任务,你可以自己写BigInteger之类的东西,但可读性和性能会相对较差:

String num1 = "216725";
String num2 =  "72681"; // two numbers
StringBuilder result = new StringBuilder();
// reverse to make iterating easier
String reversedNum1= new StringBuilder(num1).reverse().toString(), reversedNum2 = new StringBuilder(num2).reverse().toString();
// keeping track if previous index sum was at least 10
int carry = 0;
for (int i = 0; i < Math.max(num1.length(), num2.length()); i++) {
    int sum = carry;
    if (num1.length() > i) sum += Integer.parseInt(reversedNum1.substring(i, i + 1));
    if (num2.length() > i) sum += Integer.parseInt(reversedNum2.substring(i, i + 1));
    if (sum >= 10) {
        sum -= 10;
        carry = 1; // 1 needs to be added in another iteration
    } else {
        carry = 0;
    }
    result.append(sum);
}
if (carry == 1) result.append(1);
System.out.println(result.reverse().toString());

与使用一张纸和一支笔时的方法相同。从最后开始(这就是为什么要反转),在相同的索引上添加数字(如果它至少为 10,则将 1 添加到另一对)。

【讨论】:

  • 可能溢出可以写成进位,乍一看我以为你在谈论一些数据类型溢出。
  • @AshutoshKumarSharma 是的,我错过了这个词,谢谢!
【解决方案2】:

在写完一篇论文后,我写了这个,那个有效

public static void main(String[] args) {
    String input1 = "321654215";
    String input2 = "789456123";
    int[] arr1 = char2int(input1.toCharArray());
    int[] arr2 = char2int(input2.toCharArray());
    int[] intAdded = add(arr1, arr2);
    String resultat = new String(int2char(intAdded));
    System.out.println("  " + input1);
    System.out.println("+ " + input2);
    System.out.println("_____________");
    System.out.println(" " + resultat);
}

public static char[] int2char(int[] tab) {
    char[] res = new char[tab.length];
    for (int i = 0; i < tab.length; i++) {
        res[i] = (char)(tab[i] + 48);
    }
    return res;
}


public static int[] char2int(char[] tab) {
    int[] res = new int[tab.length];
    for (int i = 0; i < tab.length; i++) {
        res[i] = (int)tab[i] - 48;
    }
    return res;
}

public static int[] add (int[] tab1, int[] tab2) {
    int[] res = new int[Math.max(tab1.length, tab2.length) + 1];
    int carry = 0;
    for (int i = res.length - 1; i > 0 ; i--) {
        int sum = tab1[i-1] + tab2[i-1] + carry;;
        if (sum < 10) {
            res[i] = sum;
            carry = 0;
        }
        else {
            carry = 1;
            res[i]  = sum - 10;
        }
    }
    res[0] = carry;
    return res;
}

输出:

  321654215
+ 789456123
_____________
 1111110338

我已将每个字符串转换为 Stream 数组,并系统地将第 i 级的进位添加到第 i+1 级的操作数中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 2020-07-29
    • 2013-09-22
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多