在我的活动中,用户执行搜索,搜索有大约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)
而不是View
或EditText
上拨打Spinner
。我应该怎么做呢?
答案 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
}
希望它有所帮助...