具有自定义适配器的View.setVisibility(View.VISIBLE)

时间:2016-02-16 20:00:54

标签: android listview custom-adapter custom-view

我有类似这样的东西作为list_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);

    }

但是,即使对象不符合条件

,所有行都相等

任何提示?

2 个答案:

答案 0 :(得分:1)

您不应该使用==来比较Java中的字符串。请在非空字符串上使用equals()方法:

if ("S".equals(pedido.getAberto())) {
    status1.setVisibility(View.VISIBLE);
}

答案 1 :(得分:-1)

当你做这样的事情时,你错误地比较了字符串:

 if (pedido.getAberto() == "S") {

您正在比较引用,这不是验证对象之间相等性的有效方法......

快速修复:

替换

 if (pedido.getAberto() == "S") {

if ("S".equalsIgnoreCase(pedido.getAberto())) {