Java 中的 getView 和 Beacon(Estimote) 问题

getView and Beacon(Estimote) problem in Java

我的想法是从信标获取标题,然后根据该标题向我发送适当的布局。但是突然间它不会识别我的查询。像 String == String 是行不通的。

这是一个视图的代码,如果你们需要其他东西,我会 post 或者我们可以制作一个 skype session 来教我这个。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ProximityContent content = nearbyContent.get(position);
    String beacon = content.getTitle();

    if (beacon == "one") {
        if (convertView == null) {
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;

            convertView = inflater.inflate(R.layout.tester_beacon_i, parent, false);
        }
    } else if (beacon == "two") {
        if (convertView == null) {
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;

            convertView = inflater.inflate(R.layout.tester_beacon_ii, parent, false);
        }
    } else if (beacon == "three") {
        if (convertView == null) {
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;

            convertView = inflater.inflate(R.layout.tester_beacon_iii, parent, false);
        }
    } else {
        if (convertView == null) {
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;

            convertView = inflater.inflate(R.layout.tester_beacon_iv, parent, false);
        }
    }

    return convertView;
}

所以每次我的应用程序启动时,我只获得 tester_beacon_iv 布局,4 次,而不是将所有 4 个信标上的所有 4 个布局放在一起。

P.S。我正在使用 Estimote 信标。

当您在 Java 中的两个字符串上使用 == 时,您实际上并没有比较字符串本身。您将需要改用 .equals(String)。这是因为 == 实际上比较的是两个对象的引用,而不是它们的值。

string1.equals(string2)根据字符串中的实际字符比较两个字符串。

在您的情况下,前三个信标永远不会匹配,因此您将获得布局 #4。你需要写:

if (beacon.equals("one")) {
  ...
}

== 不能保证对 Java 中的字符串有效。对于您的特定情况,我建议使用 switch 语句。

switch (beacon) {
case "one":
    // ...
    break;
case "two":
    // ...
    break;
case "three":
    // ...
    break;
default:
    // When none of them match ...
    break;
}