View.setVisibility(View.VISIBLE) 使用自定义适配器
View.setVisibility(View.VISIBLE) with custom adapter
我的列表视图item_row有这样的东西
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/status_1"
android:id="@+id/status1"
android:visibility="gone"/>
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/status_2"
android:id="@+id/status2"
android:visibility="gone"/>
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/status_3"
android:id="@+id/status3"
android:visibility="gone"/>
</LinearLayout>
然后,我的适配器里有这个。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
if (convertView == null) {
v = parent.inflate(context, R.layout.itens_pedidos, null);
}
else {
v = convertView;
}
Pedido pedido = (Pedido) getItem(position);
// Define widgets
View status1 = (View) v.findViewById(R.id.status1);
View status2 = (View) v.findViewById(R.id.status2);
View status3 = (View) v.findViewById(R.id.status3);
...
...
现在,如果满足某些条件,我将尝试使状态#可见
if (pedido.getAberto() == "S") {
status1.setVisibility(View.VISIBLE);
}
if (pedido.getCancelado() == "S") {
status2.setVisibility(View.VISIBLE);
}
if (pedido.getEnviado() == "S") {
status3.setVisibility(View.VISIBLE);
}
然而,即使对象不满足条件,所有的线都变得相等
有什么建议吗?
您不应该使用 == 来比较 Java 中的字符串。改为对非空字符串使用 equals() 方法:
if ("S".equals(pedido.getAberto())) {
status1.setVisibility(View.VISIBLE);
}
当您这样做时,您正在错误地比较字符串:
if (pedido.getAberto() == "S") {
您正在比较引用,这不是验证对象之间是否相等的有效方法...
快速修复:
替换
if (pedido.getAberto() == "S") {
为
if ("S".equalsIgnoreCase(pedido.getAberto())) {
我的列表视图item_row有这样的东西
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/status_1"
android:id="@+id/status1"
android:visibility="gone"/>
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/status_2"
android:id="@+id/status2"
android:visibility="gone"/>
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/status_3"
android:id="@+id/status3"
android:visibility="gone"/>
</LinearLayout>
然后,我的适配器里有这个。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
if (convertView == null) {
v = parent.inflate(context, R.layout.itens_pedidos, null);
}
else {
v = convertView;
}
Pedido pedido = (Pedido) getItem(position);
// Define widgets
View status1 = (View) v.findViewById(R.id.status1);
View status2 = (View) v.findViewById(R.id.status2);
View status3 = (View) v.findViewById(R.id.status3);
...
...
现在,如果满足某些条件,我将尝试使状态#可见
if (pedido.getAberto() == "S") {
status1.setVisibility(View.VISIBLE);
}
if (pedido.getCancelado() == "S") {
status2.setVisibility(View.VISIBLE);
}
if (pedido.getEnviado() == "S") {
status3.setVisibility(View.VISIBLE);
}
然而,即使对象不满足条件,所有的线都变得相等
有什么建议吗?
您不应该使用 == 来比较 Java 中的字符串。改为对非空字符串使用 equals() 方法:
if ("S".equals(pedido.getAberto())) {
status1.setVisibility(View.VISIBLE);
}
当您这样做时,您正在错误地比较字符串:
if (pedido.getAberto() == "S") {
您正在比较引用,这不是验证对象之间是否相等的有效方法...
快速修复:
替换
if (pedido.getAberto() == "S") {
为
if ("S".equalsIgnoreCase(pedido.getAberto())) {