更好的解决方法,而不是if -else

时间:2014-10-13 15:20:29

标签: android

预先感谢您的回复。我目前正在研究Android应用程序,让用户从10个微调器类型(下拉列表)中选择几个选项。但是对于每个onChanged点击微调器,我必须检查其他微调器项目在光标中进行查询。我想使用if-else语句来解决它,因为if-else语句是接近我需要的结果的更简单的方法,但它会消耗太多的LOC,并且在需要修改代码时效率不高。

很抱歉要求你提供解决方案,但我无法找到更好的方法。

2 个答案:

答案 0 :(得分:0)

您可以将下拉列表的最后已知值存储到变量中,然后在单击时运行这些存储的变量。

var storedVaribles[10];

OnChanged(int i, var changedVariable)
{
   storedVariables[i] = changedVariable;
   checkWithAllStoredVariables(storedVariables);
}

这只是伪代码,但它应该让您了解解决方案的方向。

或许这类问题更适合CodeReview。

答案 1 :(得分:0)

您可以控制您的微调器适配器。尝试构建数据,以便直接获取查询中的信息。基本的想法是有这样一个对象:

class SpinnerItem {
    String displayTitle;
    String querySyntax;

    public SpinnerItem(String title, string sql) {
        displayTitle = title;
        querySyntax = sql;
    }
}

然后创建一个SpinnerAdapter来保存数组或这些对象的列表。在getView()中,您可以将displayTitle绑定到用户看到的TextView。如果您想撰写查询,可以致电

SpinnerItem item = adapter.getItem(spinner.getSelectedItemPosition());
// use item.querySyntax in your query

作为一个非常简单的例子,假设我有一个包含联系人的表,每个联系人都有一个电子邮件或电话号码。我希望查询根据选定的微调项目过滤此类型。以下是我如何构建它:

List<SpinnerItem> items = new ArrayList<SpinnerItem>();
items.add(new SpinnerItem("All", "1"));
items.add(new SpinnerItem("Phone numbers only", "type = 'phone'"));
items.add(new SpinnerItem("Emails only", "type = 'email'"));
MySpinnerAdapter adapter = new MySpinnerAdapter(items);
spinner.setAdapter(adapter);

// later when building query ...
StringBuilder builder = new StringBuilder("select * from table where ");
SpinnerItem item = adapter.getItem(spinner.getSelectedItemPosition());
builder.append(item.querySyntax);
String sql = builder.toString();