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;
}
我的想法是从信标获取标题,然后根据该标题向我发送适当的布局。但是突然间它不会识别我的查询。像 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;
}