一次操作不同类型的Android小部件

时间:2014-06-25 07:00:47

标签: android android-edittext android-spinner

在我的活动中,用户执行搜索,搜索有大约10个过滤器。部分过滤器为EditText,部分过滤器为Spinner。如果用户尝试执行空搜索(即没有任何过滤器的搜索),我想显示一条消息。为此我有这个方法:

 public boolean emptySearch(){

        if(!TextUtils.isEmpty(ticketID.getText().toString())){
            return false;
        }
        else if(productID.getSelectedItemId()!=0){
            return false;
        }
        else if(!TextUtils.isEmpty(desc_summary.getText().toString())){
            return false;
        }
        else if(severity.getSelectedItemId()!=0){
            return false;
        }
        else if(!TextUtils.isEmpty(customerID.getText().toString())){
            return false;
        }
        else if(!TextUtils.isEmpty(version_target.getText().toString())){
            return false;
        }
        else if(!TextUtils.isEmpty(created_by.getText().toString())){
            return false;
        }
        else if(!TextUtils.isEmpty(date_start.getText().toString())){
            return false;
        }
        else if(!TextUtils.isEmpty(date_end.getText().toString())){
            return false;
        }
        else 
            return true;
    }

(微调器中的第一个选项是默认的虚拟选项)。

这段代码看起来很乱,我觉得这有点不必要。

我想知道是否可以编写一些isViewEmpty方法,如:

 public boolean viewIsEmpty(EditText et){
        if(!TextUtils.isEmpty(et.getText().toString()))
            return false;
        else
            return true;
    }
 public boolean viewIsEmpty(Spinner sp){
        if(sp.getSelectedItemId()!=0)
            return false;
        else
            return true;
    }

然后将每个观点存储在arraylist<View>中,只需在viewIsEmpty()循环中Arraylist的每个元素上调用for(View v: views)即可。然后我可以摆脱那个庞大而繁琐的代码,但我不清楚如何继续,因为我无法在viewIsEmpty(v)而不是ViewEditText上拨打Spinner 。我应该怎么做呢?

1 个答案:

答案 0 :(得分:1)

您可以创建自己的通用测试仪。你只需要为每种类型的View编写一次测试,这个测试器可以非常通用,你可以在每次想要进行相同类型的检查时使用它。

public class ViewTester {

    private ArrayList<View> viewToTest;

    public ViewTester(){
        viewToTest = new ArrayList<View>();
    }

    public void add(View v){
        viewToTest.add(v);
    }

    public boolean isEmpty(){
        Iterator<View> it = viewToTest.iterator();
        while (it.hasNext()) {
            View v = (View) it.next();
            if(v instanceof EditText){
                String s = ((EditText)v).getText().toString();
                if(s != null && s.trim().length() > 0 )
                    return false;
            }else if(v instanceof Spinner){
                long i = ((Spinner)v).getSelectedItemId();
                if(i > 0)
                    return false;
            }else if(v instanceof DatePicker){
                // ...
            }
        }
        return true;
    }
}

然后在您的活动中,您只需在检查其内容之前注册您要测试的所有视图

ViewTester tester = new ViewTester();
tester.add(ticketID);
tester.add(productID);
tester.add(desc_summary.getText());
//...

if(tester.isEmpty()){
    // Show message
}

希望它有所帮助...