0

我认为描述我的问题的最佳方式是先描述我在做什么。

我有一个带有 3 个列表选择选项(启动列表视图的按钮)的简单活动。每个 ListPicker 在 ListView 中有 8 个项目。

Listview中的每一个Item,我们称之为Name的值,都有对应的Address和Phone。

所以这里是我正在使用的常量的例子

public final String GROUP_1_VENUE_1_NAME = "1name1";
public final String GROUP_1_VENUE_1_ADDRESS = "1address1";
public final String GROUP_1_VENUE_1_PHONE = "1phone1";
public final String GROUP_1_VENUE_2_NAME = "1name2";
public final String GROUP_1_VENUE_2_ADDRESS = "1address2";
public final String GROUP_1_VENUE_2_PHONE = "1phone2";
public final String GROUP_1_VENUE_3_NAME = "1name3";
public final String GROUP_1_VENUE_3_ADDRESS = "1address3";
public final String GROUP_1_VENUE_3_PHONE = "1phone3";
.....

public final String GROUP_2_VENUE_1_NAME = "2name1";
public final String GROUP_2_VENUE_1_ADDRESS = "2address1";
public final String GROUP_2_VENUE_1_PHONE = "2phone1";
public final String GROUP_2_VENUE_2_NAME = "2name2";
public final String GROUP_2_VENUE_2_ADDRESS = "2address2";
public final String GROUP_2_VENUE_2_PHONE = "2phone2";
....

public final String GROUP_3_VENUE_1_NAME = "3name1";
public final String GROUP_3_VENUE_1_ADDRESS = "3address1";
public final String GROUP_3_VENUE_1_PHONE = "3phone1";
public final String GROUP_3_VENUE_2_NAME = "3name2";
public final String GROUP_3_VENUE_2_ADDRESS = "3address2";
public final String GROUP_3_VENUE_2_PHONE = "3phone2";
...

所以从listPicker中挑选了一个项目,现在我想评估结果

我有 3 个字符串需要设置;姓名、地址和电话

所以现在我有这样的东西......

if (selection.equals(GROUP_1_VENUE_1_NAME) {
    name = GROUP_1_VENUE_1_NAME;
    address = GROUP_1_VENUE_1_ADDRESS;
    phone = GROUP_1_VENUE_1_PHONE;
} else if (selection.equals(GROUP_1_VENUE_2_NAME) {
    name = GROUP_1_VENUE_2_NAME;
    address = GROUP_1_VENUE_2_ADDRESS;
    phone = GROUP_1_VENUE_2_PHONE;
} else if .....

等等等等。

所以,这是我的问题。有没有更简单的方法可以让我评估选择是否等于 NAME CONSTANTS 之一,如果是,设置相应的值?

4

4 回答 4

3

我认为您需要从以下两个方向改进您的代码:

创建聚合姓名、电话和地址的新简单类:

class Contact {
    private final String name;
    private final String phone;
    private final String address;

    public Contact(String name, String phone, String address) {
        this.name = name;
        this.phone = phone;
        this.address = address;
    }
    // getters
}

使用 Map 存储选择映射:

private static final Map<String, Contact> selections = new HashMap<String, Contact>();
static {
    selections.put("3name1", new Contact("name1", "phone1", "address1"));
    // other selections
}

然后您可以通过查找地图来访问您的联系人:

Contact contact = selections.get(selection);
于 2013-05-21T13:49:50.723 回答
0

使用 anenum作为常量。然后你可以很好地设置它并打开它:)

于 2013-05-21T13:45:32.503 回答
0

一种更好OOP的方法是封装Person类中的相关字段:

public class Person{
String name;
 String   address;
 String   phone;
}

然后使用 a Map<String, Person>,用 person 对象填充它并与特定名称相关联,然后在选择时您可以简单地具有如下逻辑:

Person selectedPerson = map.get(selection);

并在需要的地方使用Person属性(姓名、地址、电话)。

于 2013-05-21T13:52:19.797 回答
0

您可以为每个类型的地址和电话准备一张地图Map<String, String>

然后您只需检查名称是否已知(如果输入始终已知,则跳过该部分),然后填写值,即:

// Preparation
addresses.put(GROUP_1_VENUE_1_NAME, GROUP_1_VENUE_1_ADDRESS);
phones.put(GROUP_1_VENUE_1_NAME, GROUP_1_VENUE_1_PHONE);

...

// Evaluation    
name = selection;
address = addresses.get(name);
phone = phones.get(name);
于 2013-05-21T13:49:56.993 回答