【问题标题】:ListView ViewHolder item child View visibility changingListView ViewHolder 项目子视图可见性变化
【发布时间】:2019-05-21 11:02:06
【问题描述】:

我有一个 ListView 和一个自定义 ArrayAdapter。问题是我无法在某些选择的元素中隐藏 (setVisibility(View.GONE)) TextView。这是我的代码的最小化可读摘要部分:

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;
    }
}

我在这里做错了什么?如果 String 的内容为空,如何在 ListView 中隐藏项目内的视图?

【问题讨论】:

  • 也许描述永远不会为空?
  • 您是否尝试将可见性代码放在 if 条件之外,如果条件不起作用,请先尝试将其放在外面,然后我建议您将该代码放在 runonui 线程中
  • 您是否在调试模式下检查了“TextUtils.isEmpty(item.getDescription())”?也许你可以改变你的方法。您可以通过 (item.getDescription().equals("")) 来查看描述。

标签: java android listview android-listview android-arrayadapter


【解决方案1】:

添加 if 条件的 else 部分以将可见性从 GONE 更改为 VISIBLE,如下面的代码所示。

公共类 ListViewAdapter 扩展 ArrayAdapter {

    私有 int listItemLayout;

    静态类 ViewHolder {
        私有 TextView 描述;
    }

    public ListViewAdapter(上下文上下文,int layoutId,List itemList){
        超级(上下文,layoutId,itemList);
        this.listItemLayout = layoutId;
    }

    @覆盖
    public View getView(int position, View convertView, ViewGroup parent) {
        ItemModel item = getItem(位置);
        视图持有者视图持有者;
        if (convertView == null) {
            viewHolder = 新的 ViewHolder();
            convertView = LayoutInflater.from(getContext()).inflate(listItemLayout, parent, false);
            convertView.setTag(viewHolder);
        } 别的 {
            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);
        }别的{
            viewHolder.description.setVisibility(View.VISIBLE);
        }
        返回转换视图;
    }
}


或者
试试if (item.getDescription()==null || item.getDescription().trim().length() == 0) 而不是if (TextUtils.isEmpty(item.getDescription()))

【讨论】:

    【解决方案2】:

    检查任何空白不应出现在您的文本中。试试这个-

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2017-06-23
      • 2014-03-21
      • 1970-01-01
      相关资源
      最近更新 更多