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())) {