Java ListView视图持有者项子视图可见性更改

Java ListView视图持有者项子视图可见性更改,java,android,listview,android-listview,android-arrayadapter,Java,Android,Listview,Android Listview,Android Arrayadapter,我有一个带有自定义阵列适配器的列表视图。问题是我无法在某些选择元素中隐藏(setVisibility(View.GONE))TextView。以下是我的代码中一个最小化的可读摘要部分: public class ListViewAdapter extends ArrayAdapter<ItemModel> { private int listItemLayout; static class ViewHolder { private TextView

我有一个带有自定义
阵列适配器的
列表视图
。问题是我无法在某些选择元素中隐藏(
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;
    }
}
公共类ListViewAdapter扩展了ArrayAdapter{
私有int列表项布局;
静态类视窗夹{
私有文本视图描述;
}
公共ListViewAdapter(上下文上下文、int-layoutId、列表项列表){
超级(上下文、布局ID、项目列表);
this.listItemLayout=layoutId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ItemModel item=getItem(位置);
持票人持票人;
if(convertView==null){
viewHolder=新的viewHolder();
convertView=LayoutFlater.from(getContext()).inflate(listItemLayout,parent,false);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.description=convertView.findViewById(R.id.text\u说明);
viewHolder.description.setText(item.getDescription());
if(TextUtils.isEmpty(item.getDescription())){
viewHolder.description.setVisibility(View.GONE);
}
返回视图;
}
}

我做错了什么?如果
列表视图
中的项目内容
字符串
为空,如何在项目内部隐藏视图?

添加if条件的其他部分,以将可见性从
消失
更改为
可见
,如下代码所示。

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; } } 公共类ListViewAdapter扩展了ArrayAdapter{ 私有int列表项布局; 静态类视窗夹{ 私有文本视图描述; } 公共ListViewAdapter(上下文上下文、int-layoutId、列表项列表){ 超级(上下文、布局ID、项目列表); this.listItemLayout=layoutId; } @凌驾 公共视图getView(int位置、视图转换视图、视图组父视图){ ItemModel item=getItem(位置); 持票人持票人; if(convertView==null){ viewHolder=新的viewHolder(); convertView=LayoutFlater.from(getContext()).inflate(listItemLayout,parent,false); convertView.setTag(viewHolder); }否则{ viewHolder=(viewHolder)convertView.getTag(); } viewHolder.description=convertView.findViewById(R.id.text\u说明); 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())

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

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; } } 公共类ListViewAdapter扩展了ArrayAdapter{ 私有int列表项布局; 静态类视窗夹{ 私有文本视图描述; } 公共ListViewAdapter(上下文上下文、int-layoutId、列表项列表){ 超级(上下文、布局ID、项目列表); this.listItemLayout=layoutId; } @凌驾 公共视图getView(int位置、视图转换视图、视图组父视图){ ItemModel item=getItem(位置); 持票人持票人; if(convertView==null){ viewHolder=新的viewHolder(); convertView=LayoutFlater.from(getContext()).inflate(listItemLayout,parent,false); convertView.setTag(viewHolder); }否则{ viewHolder=(viewHolder)convertView.getTag(); } viewHolder.description=convertView.findViewById(R.id.text\u说明); 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)

如果(TextUtils.isEmpty(item.getDescription())
检查文本中不应有任何空白,而不是
if(TextUtils.isEmpty)(item.getDescription())
。试试这个-

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

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

选中文本中不应出现任何空白。试试这个-

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

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

也许描述永远不会为空?您是否尝试过将可见性代码放在if条件之外?首先尝试这样做,如果将其放在if条件之外不起作用,那么我建议您将该代码放在runonui线程内。您是否在调试模式下选中了“TextUtils.isEmpty(item.getDescription())?也许你可以改变你的方法。您可以通过(item.getDescription().equals(“”)检查描述。也许描述从来都不是空的?您是否尝试将可见性代码放在if条件之外?首先尝试这样做,如果将其放在if条件之外不起作用,那么我建议您将代码放在runonui线程中。您是否选中了“TextUtils.isEmpty?”(item.getDescription())“在调试模式下?也许您可以更改方法。您可以通过(item.getDescription().equals(“”)检查说明。”。