setvisibility VIEW.GONE 如果 textview 在使用 viewholder 的列表视图中为空

setvisibility VIEW.GONE if textview is empty in a listview using viewholder

我有一个使用自定义 ArrayAdapter 的列表视图,使用 viewholder class 模式。在每个 row_layout 中,有 2 个文本视图 A 和 B。我想要做的是,当该列表项中的任何一个文本视图为空时。该特定行的视图应该消失并且不占用任何 space。

如果其中一个列表项的文本视图 A 为空,即使某些列表项在文本视图 A 中有文本,以下代码也会导致所有文本视图 A 消失。同样,如果列表项之一的文本视图为空B、列表视图中的所有项目都将消失。

我该如何解决这个问题?

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

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.custom_row_layout, parent, false);

        vh = new ViewHolder();
        vh.drugBrandName = (TextView) convertView.findViewById(R.id.drugBrandName);
        vh.drugOtherName = (TextView) convertView.findViewById(R.id.drugOtherName);

        convertView.setTag(vh);

    } else
        vh = (ViewHolder) convertView.getTag();

    CustomDrugItem di = itemsArrayList.get(position);


    if (di.getDrugBrandName().equals("")) {
        vh.drugBrandName.setVisibility(View.GONE);
    } 


    if (di.getDrugOtherName().equals("")) {
        vh.drugOtherName.setVisibility(View.GONE);
    } 
    return convertView;
}

static class ViewHolder {
    private TextView drugBrandName;
    private TextView drugOtherName;

}

如果文本不为空,请尝试将可见性设置为 VISIBLE。

if (di.getDrugBrandName().equals("")) {
    vh.drugBrandName.setVisibility(View.GONE);
} else {
    vh.drugBrandName.setVisibility(View.VISIBLE);
}

if (di.getDrugOtherName().equals("")) {
    vh.drugOtherName.setVisibility(View.GONE);
} else {
    vh.drugOtherName.setVisibility(View.VISIBLE);
}

你应该把两种状态(可见和消失)都放在因为你正在使用 ViewHolder 模式:

    vh.drugOtherName.setVisibility(TextUtils.isEmpty(di.getDrugOtherName()) ? View.GONE : View.VISIBLE);
    vh.drugBrandName.setVisibility(TextUtils.isEmpty(di.getDrugBrandName()) ? View.GONE : View.VISIBLE);