Sergey Emeliyanov
Sergey Emeliyanov

Reputation: 6961

ListView ViewHolder item child View visibility changing

I'm having a ListView with a custom ArrayAdapter. The problem is that I cannot hide (setVisibility(View.GONE)) TextView in some elements of choice. Here is a minimized-readable summary part of my code:

public class ListViewAdapter extends ArrayAdapter<ItemModel> {

    private int listItemLayout;

    static class ViewHolder {
        private TextView description;
    }

    public ListViewAdapter(Context context, int layoutId, List<ItemModel> itemList) {
        super(context, layoutId, itemList);
        this.listItemLayout = layoutId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ItemModel item = getItem(position);
        ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            convertView = LayoutInflater.from(getContext()).inflate(listItemLayout, parent, false);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.description = convertView.findViewById(R.id.text_desription);
        viewHolder.description.setText(item.getDescription());
        if (TextUtils.isEmpty(item.getDescription())) {
            viewHolder.description.setVisibility(View.GONE);
        }
        return convertView;
    }
}

What am I doing wrong here? How can I hide a view inside item in ListView if its content String is empty?

Upvotes: 0

Views: 133

Answers (2)

Nikhat Shaikh
Nikhat Shaikh

Reputation: 3695

Check any white space should not be in your text. Try this-

       if (TextUtils.isEmpty(item.getDescription().trim()) ||item.getDescription().trim().length()==0 ) {
            viewHolder.description.setVisibility(View.GONE);
        }

    else{
       viewHolder.description.setVisibility(View.VISIBLE);
      }

Upvotes: 1

Priyanka C
Priyanka C

Reputation: 300

Add else part of if condition to change visibility from GONE to VISIBLE as in below code.

public class ListViewAdapter extends ArrayAdapter {

    private int listItemLayout;

    static class ViewHolder {
        private TextView description;
    }

    public ListViewAdapter(Context context, int layoutId, List itemList) {
        super(context, layoutId, itemList);
        this.listItemLayout = layoutId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ItemModel item = getItem(position);
        ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            convertView = LayoutInflater.from(getContext()).inflate(listItemLayout, parent, false);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.description = convertView.findViewById(R.id.text_desription);
        viewHolder.description.setText(item.getDescription());
        if (TextUtils.isEmpty(item.getDescription())) {
            viewHolder.description.setVisibility(View.GONE);
        }else{
            viewHolder.description.setVisibility(View.VISIBLE);
        }
        return convertView;
    }
}


OR
try if (item.getDescription()==null || item.getDescription().trim().length() == 0) instead of if (TextUtils.isEmpty(item.getDescription()))

Upvotes: 1

Related Questions