无法将图像视图作为函数中的参数传递,该函数使用许多图像视图填充回收器视图

Unable To Pass Image View As Parameter in Function That Populates Recycler View with Many Image Views

我编写了一个函数来在回收站视图中填充各种图像视图,该函数运行良好没有任何问题。但它太长了(假设我有 20 个图像视图)。我想做一个小函数,做成DRY/re-usable。但是在这样做的同时,我无法弄清楚如何将 imageview 作为函数中的参数传递。现在,在你去投票或陷入困境之前,请清楚地思考我的问题和答案,以便代码可以重用,不要试图让它以另一种方式工作,因为该功能已经在工作。

函数声明为

private void updateIcons(ViewHolder viewHolder) {

    if (blockStatus == null || blockStatus.equals("not_blocked")) {

        viewHolder.ivBlock.setImageResource(R.drawable.block);

    } else if (blockStatus.equals("blocked")) {

        viewHolder.ivBlock.setImageResource(R.drawable.unblocked);

    }

    if (hideStatus == null || hideStatus.equals("visible")) {

        viewHolder.ivHide.setImageResource(R.drawable.hide);

    } else if (hideStatus.equals("hidden")) {

        viewHolder.ivHide.setImageResource(R.drawable.show);

    }

    if (notificationStatus == null || notificationStatus.equals("allowed")) {

        viewHolder.ivMute.setImageResource(R.drawable.mute);

    } else if (notificationStatus.equals("muted")) {

        viewHolder.ivMute.setImageResource(R.drawable.unmute);

    }

    if (pinSequence == null || pinSequence.equals("none")) {

        viewHolder.ivPin.setImageResource(R.drawable.pin);

    } else if (pinSequence.equals("pinned")) {

        viewHolder.ivPin.setImageResource(R.drawable.unpin);

    }

    if (privacyStatus == null || privacyStatus.equals("unlimited")) {

        viewHolder.ivLimit.setImageResource(R.drawable.limit);

    } else if (privacyStatus.equals("limited")) {

        viewHolder.ivLimit.setImageResource(R.drawable.unlimited);

    }

    if (reportStatus == null || reportStatus.equals("not_reported")) {

        viewHolder.ivReport.setImageResource(R.drawable.report);

    } else if (reportStatus.equals("reported")) {

        viewHolder.ivReport.setImageResource(R.drawable.reported);

    }

}

函数调用是

updateIcons(viewHolder);

以下是我正在尝试执行的操作,但无法将可重用图像视图作为参数传递给函数。

private void updateIcons(ViewHolder viewHolder, String statusValue, String checkValue1, String checkValue2,
                         int image1, int image2) {

    if (statusValue == null || statusValue.equals(checkValue1)) {

        viewHolder.imageView.setImageResource(image1);

    } else if (statusValue.equals(checkValue2)) {

        viewHolder.imageView.setImageResource(image2);

    }

}

基于 Mike M. 建议的正确答案

函数

private void updateIcons(ImageView imageView, String statusValue, String checkValue1, String checkValue2,
                         int image1, int image2) {

    if (statusValue == null || statusValue.equals(checkValue1)) {

        imageView.setImageResource(image1);

    } else if (statusValue.equals(checkValue2)) {

        imageView.setImageResource(image2);

    }

}

然后调用它

updateIcons(viewHolder.ivBlock, blockStatus, "not_blocked" , "blocked",
        R.drawable.block, R.drawable.unblocked);

最简单的方法是使用这个强大的库之一(Glide、Picasso、Fresco)获取图像

根据 Mike M. 建议的正确答案

函数

private void updateIcons(ImageView imageView, String statusValue, String checkValue1, String checkValue2,
                         int image1, int image2) {

    if (statusValue == null || statusValue.equals(checkValue1)) {

        imageView.setImageResource(image1);

    } else if (statusValue.equals(checkValue2)) {

        imageView.setImageResource(image2);

    }

}

然后调用它

updateIcons(viewHolder.ivBlock, blockStatus, "not_blocked" , "blocked",
        R.drawable.block, R.drawable.unblocked);