代码之家  ›  专栏  ›  技术社区  ›  Saeed

如何在onClickListener事件上第一次计算变量的值?

  •  0
  • Saeed  · 技术社区  · 6 年前

    private long checkOffCode(String pChode) {
        final long[] percent = {0};
        APIGettingPosts apiGettingPosts = new APIGettingPosts(MainActivity.this, "get_off_code.php");
        apiGettingPosts.getOffCode(new APIGettingPosts.OnOffCodeReceived() {
            @Override
            public void onReceived(List<Posts> posts) {
                if (posts == null || posts.isEmpty()) {
                    // There is no value on sever...
                } else {
                    for (int i = 0; i < posts.size(); ++i) {
    
                        // If the code in serve is equal with pCode],
                        // change the price value....
    
                        if (pChode.equals(posts.get(i).getCode())) {
                            percent[0] = Long.valueOf(posts.get(i).getPercent());
                        }
                    }
                }
            }
        });
    
        return percent[0];
    }
    

    这个 checkOffCode 函数接收一个代码,并返回一个名为 percent

    在事件中 setOnClickListener btnPurchase price 本节代码如下:

    btnPurchase.setOnClickListener(new View.OnClickListener(){
        long percent = 0;
        @Override
        public void onClick (View view){
    
        percent = checkOffCode("MYCODE");
        if (percent != 0) {
            // update price value...
            price = price - price * percent / 100;
            Log.e("Success >>", String.valueOf(price));
        } else {
            Log.e("Failure >>", String.valueOf(price));
        }
    }
    });
    

    问题是当我点击 BTN采购 第一次按下按钮,前一个值 百分比 [percent=0]是在操作中计算出来的,但是当我第二次单击按钮时,变量 价格 百分比

    输出 Log cat 在第一次和第二次单击中分别显示如下:

    如何计算 价格 用新的 第一次的价值?

    2 回复  |  直到 6 年前
        1
  •  1
  •   orzangleli    6 年前

    问题是您试图从 checkOffCode onReceived

    private void checkOffCode(String pChode) {
        final long[] percent = {0};
        APIGettingPosts apiGettingPosts = new APIGettingPosts(MainActivity.this, "get_off_code.php");
        apiGettingPosts.getOffCode(new APIGettingPosts.OnOffCodeReceived() {
            @Override
            public void onReceived(List<Posts> posts) {
                if (posts == null || posts.isEmpty()) {
                    // There is no value on sever...
                } else {
                    for (int i = 0; i < posts.size(); ++i) {
    
                        // If the code in serve is equal with pCode],
                        // change the price value....
    
                        if (pChode.equals(posts.get(i).getCode())) {
                            percent[0] = Long.valueOf(posts.get(i).getPercent());
                        }
                    }
                }
                if (percent[0] != 0) {
                    // update price value...
                    price = price - price * percent[0] / 100;
                    Log.e("Success >>", String.valueOf(price));
                } else {
                    Log.e("Failure >>", String.valueOf(price));
                }
            }
        });
    }
    
    btnPurchase.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            checkOffCode("MYCODE");
        }
    });
    
        2
  •  1
  •   Tepits    6 年前

    您可以尝试添加布尔值,如果第一次单击,则计算价格,因此如果第二次再次单击,则不会触发计算。例如:

    首先在onClick函数外生成布尔变量:

    private Boolean isFirstClicked = false;
    

    然后修改onClick函数:

    if (!isFirstClicked) {
        // update price value...
        isFirstClicked = true
        price = price - price * percent / 100;
        Log.e("Success >>", String.valueOf(price));
    } else {
        Log.e("Failure >>", String.valueOf(price));
    }