我正在使用3个ToggleButtons(A,B,C)来过滤我的数组的内容(具有AND条件),并在列表视图中显示结果。

例如
如果A为true,而B,C为false ...则列表视图仅向我显示数组中仅包含A的项目。如果A,B为true,C为false。列表视图将使用A AND B显示我的数组中的项目。

我正在用onCheckedChangeListener这样的事情:

 @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        List<BrandPlanners> filteredList = new ArrayList<>();
        if (isChecked){
            if (buttonView == A) {
                if (B.isChecked()){
                    if (C.isChecked()){
                        //show listview with A,B and C elements
                    } else {
                        // show listview with A AND B elements
                    }
                } else {
                    if (C.isChecked()){
                        // Show listview with A and C elements
                    } else {
                        // Show listview with A elements
                    }
                }
            }
            if (buttonView == B) {
                if (A.isChecked()){
                    if (C.isChecked()){
                        // show listview with 3 elements
                    } else {
                        // show listview whth A and B elements
                    }
                } else {
                    if (C.isChecked()){
                        // show listview with C and B elements
                    } else {
                        // show listview with B elements
                    }
                }
            }
            if (buttonView == C) {
                if (A.isChecked()){
                    if (B.isChecked()){
                        // show 3 elements
                    } else {
                        // show C and A elements
                    }
                } else {
                    if (B.isChecked()){
                        // show C and B elements
                    } else {
                        // show C elements
                    }
                }
            }
        } else { //if isChecked() is false
            //create all the if conditions again
        }
    }


我认为这不是一个好习惯,问题是:如何才能更好地做到这一点?这实际上是工作,但我对代码不满意。

最佳答案

使您的适配器实现Filterable。检查Documentation

关于代码,为返回位图的每一行添加一个方法(单个char将起作用),并提供有关将A,B或C与单个位相关联的信息。

例如:A的位0,B的位1和C的位2

所以0x01表示该行具有A,但没有B或C

您编写的整个代码将非常简单

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    char filter = 0x00;
    filter += A.isChecked() ? 1 : 0;
    filter += B.isChecked() ? 2 : 0;
    filter += C.isChecked() ? 4 : 0;

    for each element (
        if (element.getObjectsAsBits() == filter)
            show(element);
    )
}


P.D.我知道代码行不通。这只是伪代码,所以您有个好主意

关于android - Android ToggleButton组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32143943/

10-09 20:35